我有以下表格:
TABLE article
article_id
title
article_text
user_id
TABLE tag_article
tag_article_id
tag_id
article_id
TABLE tag
tag_id
tag
TABLE user
user_id
我想要的是搜索标题中包含字符串的所有文章或标签上的内容OR。
我目前的查询如下:
SELECT article.article_id,article.title,user.user_id,article.article_text,
FROM tag,user,article
WHERE (article_text LIKE ? OR title LIKE ? OR tag LIKE ?)
AND article.user_id=user.user_id
GROUP BY article.article_id
ORDER BY article_id DESC
答案 0 :(得分:2)
首先我建议你使用explcit连接,因为它们更容易阅读,更不容易出错(比如你错过了文章和标签之间的连接):
其次,除非你的字符串有%,否则你应该在查询中添加它们:
SELECT a.article_id, a.title, u.user_id, a.article_text,
FROM article a
INNER JOIN user u ON a.user_id = u.user_id
LEFT JOIN tag_article ta ON ta.article_id = a.article_id
LEFT JOIN tag t ON t.tag_id = ta.tag_id
WHERE a.article_text LIKE '%YOURSTRING%'
OR a.title LIKE '%YOURSTRING%'
OR t.tag LIKE '%YOURSTRING%'
GROUP BY a.article_id
ORDER BY a.article_id DESC
我正在使用LEFT JOIN,因为如果你有没有标签的文章,它仍然会在文章列中搜索。