2017-08-30 49 views
0

我並不是一個真正的開發人員,但我正在開發一個應用程序作爲一個側面項目,並且已經陷入了我試圖解決的一個SQL查詢中。這個應用程序具有標記圖像的集合。我的表結構看起來是這樣的:處理標記系統和收藏夾的Mysql查詢

我查詢了標籤系統運作良好,但是,我不是在爲加入收藏夾查詢成功。目前我的查詢如下所示:

 SELECT i.*, IF (c.image IS NOT NULL,1,0) as favorited 
     FROM (images i, tag_map m, tags t) 
    LEFT JOIN favorites as c ON c.image = i.image 
     WHERE m.tag = t.tag 
     AND (t.tag_name IN ('umbrella')) 
     AND i.image = m.image 
     AND c.image = i.image 
    GROUP BY i.image 
     HAVING COUNT(i.image) = 1 

雖然此查詢有效,但它不包括那些記錄在收藏夾表中有條目的行。下面簡單(沒有標籤系統)查詢工作:

SELECT i.*, c.*, 
     IF(c.image IS NOT NULL,1,0) as fave 
    FROM (images as i) 
    LEFT JOIN collection as c ON c.image = i.image 

在正確的方向任何建議或分將真棒!謝謝!

+4

我們停止使用過時的語法在1992年來到。加入我們。 – Strawberry

+0

對不起,查詢的哪一部分是陳舊的? – Millions

+0

我的評論中有線索 – Strawberry

回答

0

因爲事實證明,我的查詢工作正常,一旦我刪除了多餘的「AND c.image = i.image」我不小心留在了那裏。

工作查詢:

SELECT i.*, IF (c.image IS NOT NULL,1,0) as favorited 
    FROM (images i, tag_map m, tags t) 
    LEFT JOIN collections as c ON c.image = i.image 
    WHERE m.tag = t.tag 
    AND (t.tag_name IN ('umbrella')) 
    AND i.image = m.image 
GROUP BY i.image 
    HAVING COUNT(i.image) = 1