2014-09-08 1 views
0

작동하지 않습니다,하지만 내가 s.hostId는 NULL이 될 수 있기 때문에 알고 결과를 나에게MySQL의 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)); 

를 제공하지 않습니다 .

IFNULL() - 메소드를 찾았지만 다음과 같이 사용했지만 작동하지 않았습니다.

SELECT s.day, s.hour, IFNULL(h.name, "") hostname 

누군가 제발 나를 도와 줄 수 있습니까? : S

추신 : sprintf를 사용할 수있는 유일한 real_escape (두 번 같은 값이기 때문에)이지만 % 1 $ s을 % 1 $ s로 바꾸면 자리 표시자를 사용해야합니다. 오류 : 누군가가 나를 도울 수 있다면 S

그래서 당신은

+0

ISNULL 대신 IS NULL을 사용하십시오. ISNULL()은 Microsoft와 Oracle입니다. –

+0

죄송합니다. ISNULL (편집 됨) 대신 IFNULL을 의미했습니다. – MichaelDeBoey

+0

'SELECT s.day, s.hour, h.name hostName' - 쉼표가 누락 되었습니까? 'SELECT s.day, s.hour, h.name, hostName' -이'FROM schedule s, host h'는 확실하지 않습니다. 점들이 없어야합니까? 'FROM schedule.s, host.h'는 옳지 않은 것 같습니다. –

답변

0

당신은 s.hostId가 널이 될 수있는 기록을 포함 할 오신 것을 환영합니다 :-) 또한 요? 그렇다면 필드 목록을 만지면 전혀 무의미합니다. 행 포함/제외 결정은 WHERE 절에서 수행됩니다.

당신은 아마

WHERE ... 
    (s.hostId = %s OR ISNULL(s.hostId)) 
+0

호스트의 이름은 NULL이 될 수 없으므로 IFNULL() - 메소드를 쿼리에서 시도했지만 작동하지 않았습니다 ... : S – MichaelDeBoey

+0

네,하지만 호스트 이름 필드가 null이면 레코드가 제외되지 않습니다. 필드 목록에서'IFNULL (...)'을하면 행을 포함/제외 할 수 없습니다. null hostname 필드는 null hostid 필드를 의미하고,'s.hostID = foo'는 null이 hostID가 null 인 레코드를 반환하지 않습니다. null은 그 자체를 포함하여 어떤 것과도 같을 수 없기 때문입니다. "null"은 유독합니다. –

+0

'$ query = sprintf ("select day, hour, name hostName FROM schedule s, host h WHERE 날짜 = (show day = where s showd = % s ORDER BY dag, uur) 그리고 (h.id = s mysqli_real_escape_string ($ con, $ id), mysqli_real_escape_string ($ con, $ id));'(sugested와 같이), 그것은 당신이 제안한 것이 스스로를 무력화시키기 때문에'AND (h.id = s.hostId OR ISNULL (s.hostId)) '를 사용하지 않는 것과 같습니다 : S – MichaelDeBoey

0

당신은 MySQL 용 IFNULL을 사용해야합니다. ISNULL은 Microsoft의 SQL입니다.

IFNULL(h.name, "") 
+0

ISNULL (편집 됨) 대신 IFNULL을 의미하는 것이 유감스러운 그래서 IFNULL을 사용했지만 작동하지 않습니다 : S – MichaelDeBoey

관련 문제