我在我的代码中使用此查询,但它没有给我一个结果
$query = sprintf("SELECT s.day, s.hour, h.name hostName
FROM schedule s, host h
WHERE dag IN (SELECT day
FROM schedule
WHERE showId = %s
ORDER BY day, hour)
AND s.hostId = h.id,
AND s.showId = %s
ORDER BY day, hour",
mysqli_real_escape_string($con, $id),
mysqli_real_escape_string($con, $id));
我知道,因为s.hostId可以为NULL。
我已经找到了IFNULL()方法,并且像这样使用它,但是没有用。
SELECT s.day, s.hour, IFNULL(h.name, "") hostname
是的,有人能帮帮我吗? :S
PS:我知道我可以使用只有1个real_escape的sprintf(因为它是相同值的2倍),但如果我用%1 $ s替换%s就像我应该使用占位符一样我得到错误:S
所以如果有人可以帮助我,那么你也欢迎: - )
答案 0 :(得分:0)
您想要包含s.hostId可以为null的记录吗?如果是这样的话,那么摆弄现场清单就完全没有意义了。包含/排除行的决定是在WHERE
子句中完成的。
你可能想要
WHERE ...
(s.hostId = %s OR ISNULL(s.hostId))
答案 1 :(得分:0)
你应该使用IFNULL for MySql。 ISNULL用于Microsoft的sql
IFNULL(h.name, "")