MySQL count не возвращает 0 для определенного идентификатора - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть следующий код:

SELECT c.c_id, c_name, count(h.h_id) AS count 
FROM c
LEFT JOIN h ON h.h_id = c.c_id
WHERE h.info_id = 25
AND c.c_id = {$sqlrow['c_id']}
GROUP BY c.c_id

Я использую PHP для выбора c_id в операторе WHERE, к сожалению, если есть c_id со счетчиком 0 для h_id тогда строки не выбраны.Есть ли способ получить SQL для представления строк, не выбранных в качестве счетчика 0?

Поскольку для определенного цикла c_id с помощью WHERE в PHP не выбраны строки, кажется, что строка пропускается.

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

А как же:

SELECT
  c.c_id,
  c_name,
  (
    SELECT COUNT(h.h_id)
    FROM h
    WHERE h.h_id = c.c_id
    AND h.info_id = 25
  ) AS count 
FROM c
WHERE c.c_id = {$sqlrow['c_id']}
1 голос
/ 13 декабря 2011

В PHP и mySQL, когда я могу столкнуться с ситуацией такого типа, я использую простой оператор IF непосредственно под запросом, например

$sql = "SELECT your, stuff, here";
$qry = mysql_query($sql) or die("ERROR: ".mysql_error());
if($mysql_num_rows($qry) == 0) {
    # DO YOUR STUFF HERE FOR NO RESULTS
} else {
    # DO YOUR STUFF HERE FOR RESULTS
}

Я надеюсь, что это поможет вам выбрать правильный путь, и да, язнать, что SQL недействителен, он не имеет значения, так как у вас уже есть SQL - это просто для демонстрационных целей.

0 голосов
/ 13 декабря 2011
SELECT c.c_id, c_name, count(h.h_id) AS count 
FROM c
LEFT JOIN h ON h.h_id = c.c_id
and h.info_id = 25
AND c.c_id = {$sqlrow['c_id']}
GROUP BY c.c_id

помещая условие в таблицу h в предложение where, оно преобразует левое соединение во внутреннее соединение.Потому что условие условия where никогда не будет истинным, если значение столбца для h.info равно нулю в левом соединении, поэтому строка отфильтровывается.

...