gpt4 book ai didi

mysql - 被检索两次 SQL 的结果

转载 作者:行者123 更新时间:2023-11-30 21:53:08 26 4
gpt4 key购买 nike

我以前问过类似的问题,但因为我认为问题不是 SQL 本身,所以我将我的问题定向到 PHP 或 PDO,这就是为什么我重新提出这个问题(以某种方式调用它)。所以基本上我的查询是检索数据两次(除了最后一个对象),我一直在试图发现原因但找不到答案。所有曾经回复我的其他帖子的人都不知道为什么会这样,这就是为什么我决定将这个问题集中在 SQL 而不是 PHP 代码中,它自己做出了这个决定,因为每当查询在 PHPMYADMIN 上进行了测试,出现了相同的重复问题,所以我猜问题出在 SQL 本身上。先谢谢你。

想要的结果:查询检索数据(不是两次)

示例数据:

    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;

最佳答案

永远不要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;

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

关于mysql - 被检索两次 SQL 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46311604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com