我正在开发一个简单的标签产品系统和搜索系统。 我尝试了一些爆炸和数组的方法,但我无法使它工作。
我有3张桌子
tags
id title posts_tags
postid tagid posts
有没有解决方案,所以我可以用sql语句进行多标签搜索,或者只用一个标签?我只想制作一个搜索系统,以便用户可以通过一个或多个标签搜索帖子。
答案 0 :(得分:0)
//You can join tables
SELECT tags.*, posts.* FROM posts LEFT JOIN posts_tags ON posts.id = posts_tags.postid LEFT JOIN tags ON tags.id = posts_tags.tagid WHERE posts_tags.postid = '$post_id'
其中$ post_id是您要搜索其标签的帖子的ID
希望有所帮助
答案 1 :(得分:0)
要将SQL用于此类应用程序,您需要搜索匹配的标记,然后对其进行计数。
例如,如果您希望标记为July
和Beach
的帖子的ID值,则可以执行此操作。
SELECT pt.post_id
FROM posts_tags pt
JOIN tags t ON t.id = pt.tag_id
WHERE t.title IN ('July','Beach')
GROUP BY pt.post_id
HAVING COUNT(*) = 2
HAVING
子句需要两个标记,IN ()
子句提到标记标题。
如果你想搜索post_id值并首先显示匹配最多的标签,你可以试试这个。
SELECT pt.post_id, COUNT(*) score
FROM posts_tags pt
JOIN tags t ON t.id = pt.tag_id
WHERE t.title IN ('June', 'July', 'August', 'Beach')
GROUP BY pt.post_id
ORDER BY COUNT(*) DESC
然后,为了获得实际的帖子,你将所有这些都加入你的帖子表,结果就像这样。
SELECT match.score, posts.column, posts.column, posts.colun
FROM posts
JOIN (
SELECT pt.post_id, COUNT(*) score
FROM posts_tags pt
JOIN tags t ON t.id = pt.tag_id
WHERE t.title IN ('June', 'July', 'August', 'Beach')
GROUP BY pt.post_id
) match ON posts.id = match.post_id
ORDER BY match.score DESC
看到它的诀窍?当您尝试匹配多个匹配项时,您需要计算与标记匹配的数量。