3

我正在运行MySQL 5.0.88,需要从两个名为articles和的表中选择数据media

将图像上传到我的服务器时,我需要查询用户的所有文章,并查看媒体表(字段)中是否已经指定了路径,type="img"以避免运行不必要的覆盖。

我曾希望只m.type在我的查询中包含,但我无法让它工作。

我的查询如下所示:

SELECT DISTINCT a.style, a.filename, a.path, m.type
    FROM articles AS a
    LEFT JOIN mnedia AS m
       ON a.iln = m.iln
    WHERE
       a.iln = id_12345
       AND m.type = "img"
       AND m.type IS NOT NULL

这给了我用户 id_12345 的所有文章(正确),但该type字段始终是img尽管媒体表只有一条记录 article abc

问题
我需要如何查询,所以它返回一个用户(工作)显示type=NULL的所有文章,这些文章没有在表格中列出mediatype="img"对于在表格中列出的文章media(例如abc)?

感谢帮助!

编辑:表articles可能包括记录:

abc 
d
e
f
g

media可能包括

abc type=img

查询应返回:

abc type=img
d type=NULL
e type=NULL
f type=NULL
g type=NULL

编辑
我也不介意获取所有articles不在其中的记录media,例如在这张图片上,第二次加入左侧(“b.Key IS NULL)

解决方案: 好的。加入两个表时,我需要检查除 user_id 之外的另一个字段。这是它的工作原理:

SELECT DISTINCT a.style, a.filename, a.path, m.type
    FROM articles AS a
    LEFT JOIN mnedia AS m
       ON a.iln = m.iln
       AND a.style= m.style
    WHERE
       a.iln = id_12345
       AND ( m.type = "img" OR m.type IS NULL )

谢谢大家的建议!

4

2 回答 2

2

你应该把m.type = "img"条件放在LEFT JOIN而不是把它放在WHERE子句中:

SELECT DISTINCT a.style, a.filename, a.path, m.type
FROM articles AS a
     LEFT JOIN mnedia AS m
         ON a.iln = m.iln
            AND m.type = "img"
WHERE a.iln = id_12345;
于 2012-08-16T09:25:29.160 回答
1

我认为只需稍微调整您的 where 子句就足够了:

WHERE
       a.iln = id_12345
       AND (
              m.type = "img"
              OR m.type IS NULL
           )

由于 "img" 和 NULL 是您要查找的两个值

于 2012-08-16T09:25:07.210 回答