带有多个表的MySQL IFNULL()无效

时间:2014-09-08 18:56:31

标签: php sql mysqli mysql-real-escape-string ifnull

我在我的代码中使用此查询,但它没有给我一个结果

$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

所以如果有人可以帮助我,那么你也欢迎: - )

2 个答案:

答案 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, "")