2012-01-26 149 views
1

我有兩個表中選擇,但是如果沒有在表中的任何一個值,它不返回任何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 } 

SP我需要最終將兩者結合起來。

回答

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 

爲了記錄:您應該停止使用舊式連接語法。它最終會從你的數據庫管理系統中失去支持,可讀性差,維護性差。

+2

謝謝。很好,並感謝您提供更多信息。 –

+0

接受爲答案 – bowlerae