簡體   English   中英

加入1個表中具有單個ID /行但在另一個表中鏈接到多個行(相同ID)的SQL查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM