如果表中不存在行,则MYSQL查询不起作用

时间:2012-01-26 19:14:33

标签: php mysql

我有一个从两个表中选择的查询,但是如果其中一个表中没有任何值,则它不返回任何内容

SELECT albums.*, MAX(albums.date) AS newDate 
FROM albums, albumData
WHERE albums.userID='$id' 
AND albums.state='0' 
AND (
 albums.albumID=0
 OR
 albumData.id=albums.albumID
 AND albumData.state='0'
) 
GROUP BY albums.albumID, albums.userID
ORDER BY newDate DESC

如果我在mysql和php中的其他部分中执行它的一部分它按预期工作:

SELECT albums.*, MAX(albums.date) AS newDate 
FROM albums WHERE userID=$id AND albums.state='0' 
GROUP BY albums.albumID ORDER BY newDate DESC

然后:

if($quer['id']&&$quer['state']==0||$albumID==0)
{//do my stuff here }

我最终需要将两者结合起来。

1 个答案:

答案 0 :(得分:4)

您正在使用隐式INNER JOIN s的旧式连接。根据定义,INNER JOIN仅在两个表之间匹配时返回记录。

将语句转换为使用显式连接并使用LEFT JOIN语法。

SELECT  albums.*
        , MAX(albums.date) AS newDate  
FROM    albums
        LEFT JOIN albumData ON albumData.id = albums.albumID
WHERE   albums.userID='$id'  
        AND albums.state='0'  
        AND (albums.albumID=0  OR albumData.state='0')  
GROUP BY 
        albums.albumID
        , albums.userID 
ORDER BY 
        newDate DESC 

对于记录:您应该停止使用旧样式连接语法。它最终将失去DBMS的支持,可读性更低,维护更少。