目前,我正在开发一个社交媒体网站,用户可以像Facebook一样发布任何内容。现在我已经开发了一个从数据库过滤帖子的高级搜索。例如,数据库中有40,000个条目,我想通过高级搜索过滤行。例如,如果我搜索网站,它会显示正确的条目,但如果我搜索图像或视频,它会重复结果。
我只有40,000行,但在结果中显示了2,51,905个条目。这是我的疑问
SELECT p.id, p.userid, p.description as des, p.likes,
p.comments, p.views, p.post_id, p.created_on, u.name, u.user_name,
u.user_image, p.is_pin
FROM posts p, users u
WHERE p.is_deleted = 0
AND u.is_deleted = 0
and p.userid = u.id
and p.post_text LIKE '%image%' OR p.file_type LIKE '%image%' OR p.post_id LIKE '%image%' OR p.filename LIKE '%image%'
我在等你的回应。谢谢.
查询中的或
条件应包装在圆括号内,否则将返回所有结果,而不考虑查询中的其他条件。
and (p.post_text LIKE '%image%'
OR p.file_type LIKE '%image%'
OR p.post_id LIKE '%image%'
OR p.filename LIKE '%image%'
)
您缺少适当的join
子句,例如(假设您的用户表使用名为```D```的列来标识每个用户):
...FROM posts as p JOIN users as u ON p.userid = u.id...
当前,您正在进行交叉连接,这就是为什么您会得到这么多结果的原因。请参阅so上的这个答案。
对于不同连接类型的简单介绍&如何使用它们,请参阅。https://www.sql-join.com/sql-join-types。