2012-01-26 12 views
1

2つのテーブルから選択するクエリがありますが、テーブルのいずれにも値がない場合、何も返されません。テーブルに行が存在しない場合、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の私は最終的に2つを組み合わせる必要があります。

答えて

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からのサポートが緩くなり、読みにくく保守性が低下します。

+2

ありがとうございます。素晴らしい作品です。追加情報をありがとうございます。 –

+0

答えとして受け入れる – bowlerae

関連する問題