2017-08-30 47 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