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