Double SQL Query - JOIN


Double SQL Query - JOIN

我需要从两个不同的表中进行双重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

将链接两个表并生成一个可以使用双循环遍历的结果集。外部循环用于处理访问的更改,内部循环用于添加特定访问中访问的每个项目。