这个问题是如何使用 WHERE 子句中的一系列值从表中选择多行。这就是我要做的。
我有一个评论应用程序,您可以在其中发表评论,您的朋友可以回复它,有点像Facebook的墙。在同一个应用程序中,我允许每个成员彼此成为朋友。
我现在的挑战是,我不仅要展示主人的评论,还想向他们的朋友展示。我想要一个与Facebook的墙类似的功能。
所以这是我所拥有的:
Friends Table Commenting Table
_______________________ ___________________________________________
| member_id | friend_id | | member_id | comment |
----------------------- -------------------------------------------
| 10 | 14 | | 10 | Hello member # 14 |
| 14 | 10 | | 14 | hey how are you |
| 17 | 9 | | 17 | Hello world |
| 17 | 10 | | 10 | Hello |
------------------------ --------------------------------------------
所以成员 10 是成员 14 和 17 的朋友。我不仅要显示成员 10 的评论,还想显示成员 10、14 和 17 的评论。喜欢这个:
Member Comments All Member Comments
_______________________________ ___________________________________________
| member_id | comment | | member_id | comment |
------------------------------- -------------------------------------------
| 10 | Hello member # 14 | | 10 | Hello member # |
| 10 | Hello | | 14 | hey how are you |
--------------------------------- | 17 | Hello world |
| 10 | Hello |
--------------------------------------------
所以我尝试mysql_query("选择评论Commenting Table
其中member_id
= '10' ORDER BY member_id DESC")并做一堆 while 循环,但效率不是很高。还有其他方法可以使用多个值选择注释吗?
您可以通过好友的 ID 和成员的 ID 加入表,然后按成员 ID 加入组:
SELECT f.member_id AS user, c.member_id AS commentBy, c.comment AS comment
FROM commentingTable AS c, friendsTable AS f
WHERE c.member_id = f.member_id
OR c.member_id = f.friend_id
GROUP BY f.member_id
SELECT *
FROM `Commenting Table`
WHERE member_id=10
OR member id IN (
SELECT friend_id FROM `Friends Table` WHERE member_id=10
-- Uncomment the following if your Friends Table is asymetrical
-- UNION
-- SELECT member_id FROM `Friends Table` WHERE friend_id=10
)