我需要从两个不同的表中进行双重SELECT sql查询,名称为visites&项目1.:从personid=10的访问中选择访问日期、访问时间2.:SELECT itemid,itemname,itemtime FROM items WHERE itemvisitid=visitid我想我需要加入,但不知道具体怎么做。
表示例:
表:访问次数
visitid | personid | visitdate | visitreason
1 | 10 | 05/07/2014 | no reason
2 | 10 | 06/07/2014 | some reason
3 | 12 | 06/07/2014 | no reason
4 | 10 | 12/07/2014 | some other reason
表格:项目
itemid | personid | itemvisitid | itemname | itemtime
1 | 10 | 2 | box | 23
2 | 10 | 2 | clock | 70
3 | 10 | null | water | 50
4 | 10 | null | paper | 40
5 | 12 | 3 | box | 26
我现在拥有的是:
$query = "SELECT visitid, visitdate, visitreason FROM visits WHERE personid = '10' ORDER BY visitdate DESC";
// 2nd select: "SELECT itemid, itemname, itemtime FROM items WHERE itemvisitid= visitid";
$db->setQuery($query);
$results = $db->query();
while($row = mysqli_fetch_array($results)){
echo "<tr>
<td>".$row['visitid'].", ".$row['visitdate']."</td>
<td>".$row['visitreason']."</td>
<td>".$row['itemid'].",".$row['itemname'].", ".$row['itemtime']."</td>
</tr>";
}
我需要这样的结果:
<tr>
<td>1, 05/07/2014</td><td>no reason</td><td></td>
<td>2, 06/07/2014</td><td>some reason</td><td>1, box, 23<br />2, clock, 70</td>
<td>4, 12/07/2014</td><td>some other reason</td><td></td>
</tr>
我想你可以这样使用GROUP_CONCAT
:
演示:http://sqlfiddle.com/#!2/9d4e2/15
SELECT visitid, DATE_FORMAT(visitdate,'%m/%d/%Y'), visitreason,
GROUP_CONCAT(itemid,itemname, itemtime)
FROM visits left join items on visits.visitid = items.itemvisitid
WHERE visits.personid = 10
GROUP BY visitid, visitdate, visitreason
您可能想通过阅读了解GROUP_CONCAT
:
如何在MySQL 中的CONCAT中使用GROUP_CONCT
GROUP_CONCAT()
的文档在这里:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-凹入希望这能有所帮助。
SELECT `visits`.`visitid`, `visits`.`visitdate`, `visits`.`visitreason`,`items`.`itemname`, `items`.`itemtime` from `visits` INNER JOIN `items` ON `visits`.`personid`=`items`.`personid` WHERE `visits`.`personid` = '10' ORDER BY `visits`.`visitdate` DESC
如果有任何错误,请更改"items"表中的字段名称personid,然后进行检查。
此查询:
SELECT v.visitid,
v.visitdate,
v.visitreason,
i.itemid,
i.itemname,
i.itemtime
FROM visits v
INNER JOIN items i
ON ( v.visitid = i.itemvisitid )
WHERE v.person_id = 10
ORDER BY v.visitdate DESC,
i.itemid ASC
将链接两个表并生成一个可以使用双循环遍历的结果集。外部循环用于处理访问的更改,内部循环用于添加特定访问中访问的每个项目。