我有一个从两个表中选择的查询,但是如果其中一个表中没有任何值,则它不返回任何内容
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 }
我最终需要将两者结合起来。
答案 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的支持,可读性更低,维护更少。