我有两个表:items
和comments
。
我想选择用户评论过的所有项目。
为简单起见,我们假设items
表有两列:item_id
和item_content
。让comments
表格包含3列user_id
,item_id
和comment_content
。
我获得了评论用户的user_id
,我需要先从item_id
表中选择comments
,然后user_id = myUserId
。
这是一个基本查询SELECT item_id FROM comments WHERE user_id = '$myUserId'
。
然后我需要为上一个查询返回的每个item_content
选择item_id
。
我正在考虑做一个while($row = $my_first_query->fetch_array())
循环,并在其中执行SELECT item_content FROM item WHERE item_id = $row["item_id"]
之类的操作
然而,这有点混乱,我想知道是否有一种更简单的方法,通过将两个查询合并为一个。
答案 0 :(得分:3)
使用INNER JOIN
:
SELECT t1.*
FROM items t1
INNER JOIN comments t2
ON t1.item_id = t2.item_id
WHERE t2.user_id = myUserId
您建议首先查询comments
表然后循环结果集的方法效率低下。在连接中,MySQL可以比PHP代码更快地处理这个代数。
答案 1 :(得分:0)
根据您想要做的事情,您可以使用JOIN子句。 “标题”表信息将在所有行中找到,因此可能不是您想要做的。
另一种方法是运行两个不同的查询,第一个不变,第二个带连接。然后,您将获得一个带有标题的结果,另一个带有您可以通过的所有详细信息。它比在网络上运行相同的查询更有效。