提问者:小点点

MySQL查询显示重复的结果并花费太多时间


目前,我正在开发一个社交媒体网站,用户可以像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%'

我在等你的回应。谢谢.


共2个答案

匿名用户

查询中的条件应包装在圆括号内,否则将返回所有结果,而不考虑查询中的其他条件。

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。