对于特定ID,MySQL计数不返回0

时间:2011-12-13 01:33:28

标签: php mysql loops count zero

我有以下代码:

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在WHERE语句中选择c_id,遗憾的是,如果c_id的{​​{1}}计数为0,则不会选择任何行。有没有办法让SQL表示没有选择任何行作为0的计数?

因为在PHP中没有为特定h_id c_id循环选择任何行似乎跳过该行。

3 个答案:

答案 0 :(得分:1)

当我遇到这种情况时,使用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,所以它是无关紧要的 - 它仅用于演示目的。

答案 1 :(得分:1)

怎么样:

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']}

答案 2 :(得分:0)

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子句,它将左连接转换为内连接。因为如果h.info的列值从左连接为空,则where子句条件永远不会为真,因此该行被过滤掉。