簡體   English   中英

MySQL; 從三個表中選擇時限制一個表中的記錄

[英]MySQL; limiting records from one table when selecting from three

我試圖從數據庫中提取“人員”集合,以在HTML頁面中顯示為列表。 一個人可以屬於一個或多個類別。 一個人可以有一張或多張照片。

我想做的是獲取屬於特定類別的人員的集合,即使對於我來說,這也非常簡單:

SELECT * FROM person,personcategorylookup在哪里personcategorylookup.personUID = person.uID和personcategorylookup.categoryUID = 1

但是,我也想為每個人獲取最新上傳的照片。 他們可能已經上傳了許多照片,但我只想根據照片表中的uploadDate最新的照片。

我嘗試了以下查詢:

選擇*從人員,personcategorylookup,照片中,其中personcategorylookup.personUID = person.uID和personcategorylookup.categoryUID = 1並且photos.personUID = person.uID

但是,這顯然並沒有限制來自photos表的記錄數量,因此我最終為每個Person添加了多條記錄。

我實際上想要做的是:

SELECT * FROM person,personcategorylookup,photos………排序按photosTableOnlyDate LIMIT photosTableOnly 0,1

我也嘗試了UNION SELECT查詢,但列數不同,因此無法正常工作。

最后,我嘗試了一個能正常工作的子查詢,但顯然我一次只能與這些子查詢拉一列,而且我覺得我可能在不必要地錘擊MySQL服務器:

SELECT *,(從人員,照片中選擇源,其中personUID = person.uID,ORDER BY BYDATEDATE LIMIT 0,1)作為源,來自人員,personcategorylookup,其中personcategorylookup.personUID = person.uID和personcategorylookup.categoryUID = 1

我的表格如下:

人表

PK int uID
VARCHAR name

分類表

PK int uID
VARCHAR label

PersonCategory查找表

PK personUID
PK categoryUID

照片表

PK personUID
PK photoSource
DATETIME uploadDate

假設上載日期對於一個人而言是唯一的,請使用子查詢獲取每個人的最新照片日期,並將其與照片表關聯:

SELECT * 
FROM persons
INNER JOIN personcategorylookup ON personcategorylookup.personUID = persons.uID
INNER JOIN 
(
    SELECT personUID, MAX(uploadDate) AS latest_photo_date
    FROM photos 
    GROUP BY personUID
) sub0
ON sub0.personUID = persons.uID
INNER JOIN photos ON sub0.personUID = photos.personUID AND sub0.latest_photo_date = photos.uploadDate
WHERE personcategorylookup.categoryUID = 1

嘗試這個:

SELECT 
    *
FROM 
    persons 
JOIN 
    personcategorylookup ON (personcategorylookup.personUID = persons.uID AND  personcategorylookup.categoryUID = 1)
LEFT JOIN 
    photos ON (persons.uID = photos.personUID)
GROUP BY persons.uID;

小提琴在這里: http ://sqlfiddle.com/#!2/ d68b1/1

注意: @Kickstart正確指出,由於在這種情況下GROUP BY的行為不確定,因此您無法為每個人獲取哪張照片。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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