![](/img/trans.png)
[英]Return one row for a table Left join with another table has multirow with same ID
[英]Join SQL query that has single id/row in 1 table, but links to multiple rows(same id) in another table?
首先對不起,標題很長。
我的問題/情況就是這樣。
1.)我在mysql中有2個表
2.)在第一個表格中,每個列表都有一個唯一的ID(每個列表在一行中)
3.)在第二張表中,它具有鏈接到第一張表中列表ID的圖像的名稱/標記
4.)每個清單可以有多個圖像(第二個表中的多行)。
我想做的是從表1中提取所有清單,然后從表1中使用Listing.id從表2中提取鏈接到listing.id的所有圖像行。 我現在很困惑,因為表2中有多行具有相同的listing.id。我嘗試查詢以顯示*,但它只回顯表2中的最后一個圖像(行)。
當我加入2表時,它似乎不起作用。 而且我不確定是否查詢兩次然后將數組推在一起。
謝謝你的時間
$result=mysqli_query($con,"SELECT * FROM Listing JOIN listingpic ON
(Listing.id = listingpic.listingid)
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+300 DAY GROUP BY Listing.id ORDER BY Listing.id DESC") or die( mysqli_error($con));
while ($row = mysqli_fetch_assoc($result))
{
$output[] = $row;
}
if (!empty($output)){
echo json_encode( $output );}
else{
echo json_encode( [] );
}
每個id只能得到一個結果,因為您使用的是GROUP BY Listing.id
。 如果不對它們進行分組,則每個表2行都會得到一個結果行,每次都包含列表ID。
如果希望在一個查詢中以“一個ID:多個數據”的形式檢索數據,則可以使用GROUP_CONCAT例如,然后explode()
檢索到的字符串結果。
否則,從表1中獲取所有ID,然后在PHP中對其進行迭代,並對每個ID進行一次附加查詢
專家提示:不要對MySQL GROUP BY
使用令人困惑的MySQL擴展。 閱讀此: http : //dev.mysql.com/doc/refman/5.6/en/group-by-handling.html
專家提示:不要使用SELECT *
,尤其是在連接表時。 而是枚舉結果集中所需的列。
SQL的固有思想是結果集(如表)是矩形的。 他們有行和列。 每行通常代表一個現實世界的項目-一個“實體”-每列代表該實體的某些屬性。
您描述的結果集本質上將重復第一個表中的信息,以便可以逐行顯示第二個表中的信息。
我想您要查詢的是這個。
SELECT Listing.id, listing.date,
listingpic.id, listingpic.url, listingpic.caption
FROM Listing
JOIN listingpic ON Listing.id = listingpic.listingid
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+300 DAY
ORDER BY Listing.id DESC, listingpic.id
這將為您提供每張圖像一行。
如果內存不足,那是因為結果集很大。 您可能想使用第一個和最后一個發布日期以某種方式限制它:
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+300 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())+293 DAY
或帶有LIMIT子句。
ORDER BY Listing.id DESC, listingpic.id
LIMIT 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.