Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Php 将列值与嵌套选择进行比较_Php_Mysql_Select - Fatal编程技术网

Php 将列值与嵌套选择进行比较

Php 将列值与嵌套选择进行比较,php,mysql,select,Php,Mysql,Select,例如,我需要通过postsid找到一个用户。包含用户和帖子的数据库可能如下所示: Users: id | username | password ---+----------+--------- 1| John| **** 2| Eve| **** 3| Rich| **** Posts: id | author_id | contents ---+-----------+--------- 1|

例如,我需要通过posts
id
找到一个用户。包含用户和帖子的数据库可能如下所示:

Users:

 id | username | password
 ---+----------+---------
   1|      John|     ****
   2|       Eve|     ****
   3|      Rich|     ****

Posts:

 id | author_id | contents
 ---+-----------+---------
   1|          1| I'm John
   2|          2|  I'm Eve
   3|          3| I'm Rich
   4|          3| It's Rich not rich, keep that on mind...
SELECT username, id 
FROM `user` 
WHERE id IN (SELECT author_id FROM `post` WHERE author=$MYID)
我的情况与姿势略有不同,因为就我而言,我不需要任何关于post的信息。
因此,根据上述情况,在我发现的一些随机帖子的帮助下(由于MySql问题,我不知道在谷歌上搜索什么),我认为我的查询应该如下所示:

Users:

 id | username | password
 ---+----------+---------
   1|      John|     ****
   2|       Eve|     ****
   3|      Rich|     ****

Posts:

 id | author_id | contents
 ---+-----------+---------
   1|          1| I'm John
   2|          2|  I'm Eve
   3|          3| I'm Rich
   4|          3| It's Rich not rich, keep that on mind...
SELECT username, id 
FROM `user` 
WHERE id IN (SELECT author_id FROM `post` WHERE author=$MYID)

这不起作用,所以我想需要比语句中神秘的
更具魔力。

如果我理解正确,这可能会起作用:

SELECT username, id FROM `user` WHERE id IN (SELECT author_id FROM `post` WHERE id=$MYID)

问题是
post
posts
user
users

SELECT username, id
FROM `users`
WHERE id IN (SELECT author_id FROM `posts` WHERE author=$MYID);
但更重要的是,MySQL的早期版本(高达5.6.x)在优化查询中的
方面做得很差。您可以将其改写为:

SELECT username, id
FROM `users` u
WHERE exists (SELECT 1 FROM `posts` p WHERE author=$MYID and p.author_id = u.id)

$MYID
是一个帖子id,不是吗?所以你的内部条件应该是
其中id=$MYID
。是的,我碰巧把它搞混了。不幸的是,我对使用MySQL非常不确定,所以在仔细检查之前我创建了一个帖子。哦。。。真不敢相信我犯了这么愚蠢的错误。至少,我还将其改写为我的SO示例。问题是我搜索了
作者id=$MYID
,而不是搜索
id
。不过,我很高兴听到您关于性能的说明,我将尝试该查询
`users`u
代表
`users`AS u
?那是速记吗?