2009-09-21 62 views
0

我的实际问题是如何创建自动完成下拉关闭标签,以便引用特定页面,如本网站。通过标记页面为本地网页创建搜索选项

我已经有一个autocomlete下拉菜单,它看起来在数据库领域开始 东西%(通配符)一个字,但是这仅仅是一个字

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

,并通过输入两个或多个标签, 结果应得到更精确的

这些只是我自己的想法,我还没有想出什么将是acomplish的最佳方式。

编辑 我用下面的信息做这样的事情。 我仍然需要在搜索结果中创建一个页面,所以这个很长时间没有准备好。

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"; 

感谢,理查德

+0

看你的SQL查询,它将返回匹配任何输入的标签(OR)是目标,而不是所有的人(TAG1和TAG2) – 2009-09-21 13:03:06

+0

我的知道,你的语法更好。如果我记得一些关于语法的工作,我只是在尝试。太糟糕了,那些子选项是不允许的。顺便说一下,我在看到你编辑你的答案之前就这样做了。 – Richard 2009-09-21 13:18:33

回答

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 
+0

谢谢,这有助于 – Richard 2009-09-21 11:13:38

+0

谢谢你的sql语法 - 从taxtbox的sql中获取tag3和tag2,我可能必须使用某种关闭split函数,explode(),split(),我猜? – Richard 2009-09-21 13:00:51

+0

可能 - 这将取决于在客户端(浏览器)或服务器上如何使用/转换数据 - 所以有多种方法可以实现相同的结果 – 2009-09-21 13:16:16