【问题标题】:create search option for local webpages by tagging a page通过标记页面为本地网页创建搜索选项
【发布时间】:2009-09-23 15:10:49
【问题描述】:

我的实际问题是我将如何创建一个自动完成下拉标签来引用特定页面,比如在这个网站上。

我已经有一个自动完成下拉菜单,它会在 db 字段中查找以 something%(通配符),但这只是一个词

如果您希望在一个字段中有 5 个标签,用逗号分隔,如 tag1、tag2、tag3 等 这将引用一个特定的页面。 例如,您将如何开始查询以查找以字母 F 开头的标签,提取它们并将它们放入下拉列表中,同时从 url 字段中获取 url。

也可以通过输入两个或多个标签, 结果应该更精确

这些只是我自己的想法,我还没有想出最好的方法来完成这个。

编辑 我用下面的信息做了这样的东西。 我仍然需要用搜索结果制作一个页面,所以这很长时间没有准备好。

CREATE TABLE tag_targets (
  tag_target_id MEDIUMINT UNSIGNED NOT NULL auto_increment,
  tag_target_naam varchar(30) NOT NULL,
  tag_target_url varchar(255) NOT NULL,
  PRIMARY KEY  (tag_target_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE tags (
  tag_id MEDIUMINT UNSIGNED NOT NULL auto_increment,
  tag varchar(30) NOT NULL,
  PRIMARY KEY  (tag_id),
  UNIQUE KEY tag (tag)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE target_tag (
  tag_target_id MEDIUMINT UNSIGNED NOT NULL,
  tag_id MEDIUMINT UNSIGNED NOT NULL,
  FOREIGN KEY (tag_target_id) REFERENCES tag_targets(tag_target_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


$q = "SELECT t1.tag_target_url,t2.tag FROM tag_targets AS t1,tags AS t2, target_tag AS t3 WHERE t1.tag_target_id = t3.tag_target_id AND t2.tag_id = t3.tag_id AND tag LIKE '$queryString%' LIMIT 10";

谢谢,理查德

【问题讨论】:

  • 查看您的 sql 查询,它将返回与输入的任何标签 (OR) 匹配的目标,而不是所有标签 (tag1 AND tag2)
  • 我知道,你的语法更好。我只是在尝试,如果我记得一些语法是如何工作的。太糟糕了,不允许子选择。顺便说一句,我在看到您编辑答案之前就这样做了。

标签: php mysql autocomplete


【解决方案1】:

我可能不会在该页面的单个字段中包含标签(逗号分隔),而是一个“标签”表:

tags:
ID | name
---------
 1 | tag1
 2 | tag2
 3 | tag3
 4 | tag4


page_tags:
page_id | tag_id
----------------
      1 | 2 
      1 | 3
      2 | 1
      3 | 4
      3 | 3

您可以通过简单的方式查询任何标签,并获得任何匹配的页面。

例如,如果用户键入“tag3”,它将匹配页面 1 和 3,但“tag2,tag3”(或“tag3,tag2” - 顺序无关)只会匹配页面 1。

上面的示例 SQL 查询:

SELECT 
    page_tags.page_id
FROM
    page_tags INNER JOIN tags
    ON page_tags.tag_id=tags.id
WHERE
    tags.name IN ('tag3', 'tag2') 
GROUP BY
    page_id HAVING count(page_tags.tag_id) = 2

【讨论】:

  • 感谢 sql 语法——为了从 taxtbox 获取 sql 中的 tag3 和 tag2,我可能不得不使用某种拆分函数,explode(),split(),我猜?
  • 可能 - 这将取决于数据在客户端(浏览器)或服务器上的使用/转换方式 - 因此有多种方法可以实现相同的结果
  • 只有你的 sql innerjoin 应该是 "=tags.tag_id"
【解决方案2】:

我建议使用 jQuery 来制作自动完成字段。它有一个很好的界面来制作它们:

http://docs.jquery.com/Plugins/Autocomplete

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多