2014-06-05 20 views
1

好吧,所以我已經有一個相當複雜的SQL語句來獲取我的信息,但我需要添加其他內容。SQL連接:對行進行計數並從另一個表中獲取最近的行

基本上,項目獲得的文件的數量,也是各類與之相關聯的文件的數量(除其他事項外)...

我還需要獲得最新文件的ID平面佈置圖和演示文稿作爲另一個獨立的現場

SELECT 
    items.*, 
    designers.name AS designer, 
    locations.name AS location, 
    COUNT(DISTINCT files.id) AS files, 
    SUM(files.type = 'floorplan') AS floorplans, 
    SUM(files.type = 'presentation') AS presentations, 
    SUM(files.type = 'photo') AS photos 
FROM 
    items 
    LEFT JOIN designers 
    ON items.designer_id = designers.id 
    JOIN locations 
    ON items.location_id = locations.id 
    LEFT JOIN files 
    ON (items.id = files.item_id) 
WHERE items.location_id = 8 
GROUP BY items.id 

我已經看過其他的問題答案如何加入最近的另一個表的行,但它們是基於無連接來開始和我現有的查詢,我不知道哪裏開始。我仍然需要文件數量,我無法兩次加入表格。因此,總而言之,我需要所有這些以及最近的平面佈置圖和最近的展示的ID。文件有一個包含unix時間戳的date_uploaded列。

+0

這些文件具有包含添加它們時的unix時間戳的date_uploaded列。所以最新的date_uploaded時間戳的文件類型。 – Adam

+0

或者你有創建日期,如果連接只有一個記錄,你可以安全地加入任何東西,並得到笛卡爾的產品。 –

+0

你是什麼意思?你可以說得更詳細點嗎? – Adam

回答

1

如果您需要根據文件類型的唯一文件ID,您就可以在GROUP_CONCAT使用CASEORDER BYSUBSTRING_INDEX()回暖也只是最新的一個

SELECT ..., 
SUBSTRING_INDEX(
    GROUP_CONCAT(
    CASE 
     WHEN files.type = 'floorplan' 
     THEN files.id 
     ELSE NULL 
    END ORDER BY date_uploaded DESC 
) ,',',1) AS floorplans_fileid, 
    SUBSTRING_INDEX(
    GROUP_CONCAT(
    CASE 
     WHEN files.type = 'presentation' 
     THEN files.id 
     ELSE NULL 
    END ORDER BY date_uploaded DESC 
) ,',',1) AS presentations_fileid 
... 
FROM ... 

這樣你就可以擁有最新的文件ID只不該行基於條件

+1

工作完美,非常感謝! – Adam

相關問題