我有以下代码:
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
循环选择任何行似乎跳过该行。
答案 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子句条件永远不会为真,因此该行被过滤掉。