例如,我需要通过发布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...
我的情况与post<->略有不同用户情况,因为在我的情况下,我不需要任何关于帖子的信息
因此,根据上面的内容,在我发现的一些随机帖子的帮助下(对于MySql问题,我永远不知道在谷歌上搜索什么),我认为我的查询应该是这样的:
SELECT username, id
FROM `user`
WHERE id IN (SELECT author_id FROM `post` WHERE author=$MYID)
这不起作用,所以我想需要比神秘的IN
语句更神奇的东西。
问题是post
与posts
还是user
与users
?
SELECT username, id
FROM `users`
WHERE id IN (SELECT author_id FROM `posts` WHERE author=$MYID);
然而,更重要的是,MySQL的早期版本(高达5.6.x)在对in
查询进行阿片化方面做得很差。您可以将其重写为:
SELECT username, id
FROM `users` u
WHERE exists (SELECT 1 FROM `posts` p WHERE author=$MYID and p.author_id = u.id)
如果我理解正确,这可能会起作用:
SELECT username, id FROM `user` WHERE id IN (SELECT author_id FROM `post` WHERE id=$MYID)