2017-09-20 65 views
1

我以前曾问过类似的问题,但正如我以为问题不是SQL自我导向我的问题到PHP或PDO,这就是为什么我重新问这个问题(致电它在某种程度上)。所以基本上我的查询是两次检索数据(排除最后一个对象),我一直在试图找出原因,但找不到答案。所有曾经回复过我的另一篇文章的人都不知道为什么会发生这种情况,这就是为什么我决定将此问题关注于SQL而不是PHP代码中,这是我自己做出的决定,因为每当查询在PHPMYADMIN上测试出现相同的重复问题,所以我猜这个问题是在SQL本身。先进的谢谢你。正在检索结果两次SQL

Desierd结果:查询retriving数据(不是两次)

的样本数据:

INSERT INTO `personal_posts` (`id`, `body`, `posted_at`, `user_id`, `likes`, `postimg`, `topics`) VALUES 
(1, 'post 1', '2017-01-27 00:00:00', 3, 1, NULL, NULL), 
(2, 'post 2, '2017-09-10 00:00:00', 1, 1, NULL, NULL), 

我的查询:

SELECT personal_posts.id, personal_posts.body, personal_posts.posted_at, personal_posts.postimg, personal_posts.likes, users.`username` FROM users, personal_posts, followers 
      WHERE (personal_posts.user_id = followers.user_id 
      OR personal_posts.user_id = :useridB) 
      AND users.id = personal_posts.user_id 
      AND follower_id = :userid 
      ORDER BY personal_posts.posted_at DESC; 
+1

编辑您的问题,并提供样本数据和期望的结果。 –

+0

我加了你所要求的@GordonLinoff – Itsmoloco

+0

不,你没有。请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

回答

0

决不FROM子句中使用逗号。 始终使用使用正确的,明确的JOIN语法。如果您要求数据库首先生成所有表格的笛卡尔积,那么您期望什么?重复似乎很可能。

也许这就是你想要的查询:

SELECT pp.id, pp.body, pp.posted_at, pp.postimg, pp.likes, u.username 
FROM personal_posts pp JOIN 
    users u 
    ON pp.user_id = u.id JOIN 
    followers f 
    ON pp.user_id = f.user_id 
WHERE f.follower_id = :userid OR pp.user_id = :useridB 
ORDER BY pp.posted_at DESC; 

这只是一个猜测,但是。它至少是可读的。

+0

感谢您的尝试,尽管我得到了同样的结果。 – Itsmoloco

0

当我收到重复记录时,有时会添加所有表中的所有列以查看重复项的位置。所以,你可以尝试这样的查询(基于戈登·利诺夫的答案):其中一个表结束

SELECT 'pp', 
pp.*, 
'u', 
u.*, 
'f', 
f.* 
FROM personal_posts pp 
JOIN users u ON pp.user_id = u.id 
JOIN followers f ON pp.user_id = f.user_id 
WHERE f.follower_id = :userid OR pp.user_id = :useridB 
ORDER BY pp.posted_at DESC; 

(我已经添加了“PP”等领域,在引号,所以你可以在搜索结果中看到和另一个表开始。)

您应该得到很多列的结果,但它应该会显示记录的不同位置。这将表示缺少连接条件或WHERE子句。

这不是最终的查询,但它可以帮助您找到问题。

+0

感谢您的帮助,我是SQL新手,重复的结果,id和follower_id之间存在两个差异(如下图所示)https://ibb.co/kLtg9Q可能会出错? – Itsmoloco