通过标记页面为本地网页创建搜索选项

时间:2009-09-21 10:11:33

标签: php mysql autocomplete

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

我已经有了一个autocomlete下拉列表,它在db字段中查找以。开头的单词 %(通配符),但这只是一个单词

如果您想在一个字段中使用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";
谢谢,理查德

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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