Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL中检索两次结果_Mysql_Sql_Pdo - Fatal编程技术网

Mysql 在SQL中检索两次结果

Mysql 在SQL中检索两次结果,mysql,sql,pdo,Mysql,Sql,Pdo,我以前也问过类似的问题,但因为我认为问题不在于SQL it本身,所以我将问题导向PHP或PDO,这就是为什么我要重新问这个问题(从某种意义上说)。因此,基本上我的查询是两次检索数据(最后一个对象除外),我一直在试图找出原因,但找不到答案。所有回复我另一篇文章的人都不知道为什么会发生这种情况,这就是为什么我决定把这个问题集中在SQL上,而不是PHP代码上,因为无论何时在PHPMYADMIN上测试查询,都会出现相同的重复问题,所以我想问题出在SQL本身。提前谢谢你 设计结果:查询检索数据(不是两次)

我以前也问过类似的问题,但因为我认为问题不在于SQL it本身,所以我将问题导向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;
然而,这只是一个猜测。至少可读。

切勿在
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;

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

当我获取重复记录时,有时我会添加所有表中的所有列以查看重复记录的位置。因此,您可以尝试这样的查询(基于Gordon Linoff的答案):

(我在引号中添加了'pp'和其他字段,以便您可以在结果中看到一个表结束,另一个表开始的位置。)

你应该得到很多列的结果,但是它应该告诉你记录的不同之处。这将指示缺少联接条件或WHERE子句


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

当我获取重复记录时,有时我会添加所有表中的所有列以查看重复记录的位置。因此,您可以尝试这样的查询(基于Gordon Linoff的答案):

(我在引号中添加了'pp'和其他字段,以便您可以在结果中看到一个表结束,另一个表开始的位置。)

你应该得到很多列的结果,但是它应该告诉你记录的不同之处。这将指示缺少联接条件或WHERE子句


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

编辑您的问题,并提供示例数据和所需结果。我添加了您要求的内容@GordonLinoffNo,您没有。请参见编辑您的问题并提供示例数据和所需结果。我添加了您要求的@GordonLinoffNo,您没有。请参阅“感谢您的尝试”,尽管我获得了相同的结果。感谢您的尝试,尽管我获得了相同的结果。感谢您的帮助,我是SQL新手,重复的结果之间有两个不同之处,id和follower_id(如下图所示),那么可能出了什么问题?感谢您的帮助,我是SQL新手,复制的结果之间有两个区别,id和follower_id(如下图所示),那么会出什么问题?