2012-01-26 2 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

Смежные вопросы