MYSQL где или оператор не работает, как ожидалось - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь подсчитать количество строк в этом запросе, однако он не работает должным образом, это возвращает дополнительную строку, это должно быть 12, но это 13.

$numPhotos = mysql_num_rows(mysql_query("
SELECT albums.id 
FROM albums, albumData
WHERE 
(albumData.id=albums.albumID OR albums.albumID=0)
AND
albums.userID=$id
AND albums.state=0
AND albumData.state=0
"));

Когда я удаляю часть оператора OR и не считаю строки с albumID = 0, он возвращает 11. Есть только одна строка, где albumID равен 0, но считается как две?

$numPhotos = mysql_num_rows(mysql_query("
SELECT albums.id 
FROM albums, albumData
WHERE 
albumData.id=albums.albumID
AND
albums.userID=$id
AND albums.state=0
AND albumData.state=0
"));

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Попробуйте написать запрос, используя JOIN:

SELECT albums.id FROM albums
LEFT JOIN albumData 
   ON albums.albumID=albumData.id
  AND albums.state=0
  AND albumData.state=0
WHERE albums.userID=$id

или

SELECT albums.id FROM albums
LEFT JOIN albumData 
   ON albums.albumID=albumData.id
WHERE albums.userID=$id
  AND albums.state=0
  AND albumData.state=0

Решает ли это вашу проблему?

РЕДАКТИРОВАНИЕ:
Попробуйте это

SELECT DISTINCT albums.id FROM albums
INNER JOIN albumData 
   ON (albums.albumID = albumData.id OR albums.albumID = 0)
  AND albums.state=0
  AND albumData.state=0
WHERE albums.userID=$id
0 голосов
/ 24 января 2012

Просто замените столбцы запроса на count (*), например:

SELECT count(*) 
FROM albums, albumData
WHERE 
(albumData.id=albums.albumID OR albums.albumID=0)
AND
albums.userID=$id
AND albums.state=0
AND albumData.state=0

Этот запрос вернет одну строку и столбец и будет содержать количество строк, сгенерированных запросом.

...