2014-07-05 152 views
-1

我需要2頁不同的表雙SELECT SQL查詢與名稱訪問&項目 1 .:選擇visitid,visitdate,visitreason FROM訪問WHERE PERSONID = 10 2 .:選擇的itemid,ITEMNAME,ITEMTIME FROM items where itemvisitid = visitid 我想我需要做一個JOIN,但不知道具體如何。雙SQL查詢 - JOIN

表的例子:

表:訪問

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> 
+1

SO並不是人們爲你做事的地方,而是回答你在做事情時發現的問題。 – Cynical

回答

0

我想一心一意使用GROUP_CONCAT這樣的:

DEMO:http://sqlfiddle.com/#!2/9d4e22/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
How to use GROUP_CONCAT in a CONCAT in MySQL

GROUP_CONCAT()該文件是這裏:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat 希望這有助於。

+0

謝謝你這個工作。 有沒有辦法在GROUP_CONCAT結果之間添加「空格」或「 - 」?在我的情況下,結果如下所示:1box23,2clock70 – John

+1

@John謝謝!是的,你可以像這樣'GROUP_CONCAT(itemid,' - ',itemname,' - ',itemtime)'http://sqlfiddle.com/#!2/9d4e22/30 – naota

0
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 

,如果有任何錯誤,請更改PERSONID的字段名稱「項目」 table.and然後檢查。

0

這個查詢:

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 

將連接這兩個表,併產生一個結果,你可以遍歷使用雙迴路。外部循環用於處理對訪問的更改,內部用於添加在特定訪問中訪問的每個項目。