2012-05-24 3 views
2

을 내 NOT이 작동하려면 MySQL의 문을 존재하고 그것이 지금 나에게 화를 운전하는 것 얻을 수 없습니다- MYSQL/PHP

$ancestors = mysql_query(' 
    SELECT * FROM comments e 
     WHERE 
      ancestors = "' . $comment["id"] . '" AND 
      user_id != "' . $user->user_object["id"] . '" AND 
       NOT EXISTS 
        (
         SELECT null 
         FROM notifications d 
         WHERE d.target_id = e.id 
        ) 
', $database->connection_handle); 

어떤 아이디어?

while($reply = mysql_fetch_array($ancestors, MYSQL_ASSOC)){ 

내가 이렇게 할 경우 :

ERROR :

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /<>/<>/functions.php on line 785 

라인 785 그것은 내 결과를 반환

$ancestors = mysql_query('SELECT * FROM ' . $database->db_prefix . 'comments 
    WHERE  
     ancestors = "' . $comment["id"] . '" AND 
     user_id != "' . $user->user_object["id"] . '"', 
     $database->connection_handle 
); 

내가 기대합니다.

알림 테이블 항목을

MySQL의 VAR 덤프를 포함하지 =

string(46) "Table 'whatever_co.comments' doesn't exist" 

// ::: '해결했다. $ database-> db_prefix. '테이블 선택기에서 빠졌습니다.

+0

어떤 오류가 있습니까? – ncremins

+3

null은 통지의 열 이름입니까? 그렇다면 문제가 있습니다. 예약어이기 때문에 (http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html) – amaidment

+0

"어떤 아이디어?" --- 예, 하나 있습니다 : 고치다 – zerkms

답변

0

테이블 접두사가 누락되었습니다 : '. $ database-> db_prefix. '의견 및 알림. 그 질문의 이유는 내가 처음에는 존재하지 않았고 그것이 틀린 부분이라고 가정하고있었습니다. 모든 시간 내 주셔서 감사합니다. 이것은 축하의 원인입니다.

0

NOT EXISTS은 정상입니다. 나는 그것이 당신의 선택에 문제가 될지도 모른다라고 생각한다. 해당 테이블에 "null"이라는 필드가 있습니까? 그렇지 않다면 당신 문제입니다.

나는 당신이 뭔가를 사용해보십시오

Select * 
FROM notifications d 
WHERE d.target_id = e.id 
AND e.id IS NULL 

의 라인을 따라 뭔가를 찾고있다 생각합니다.

+1

"테이블에"null "이라는 필드가 있습니까? 그렇지 않으면 문제가 발생합니다." --- 잘못된. 답이 아닙니다 – zerkms

+0

고마워요. 사실 그게 내가 궁금해하는 전부 야. 나는 그것이 올바른 방향으로 놓인 길이다. 우수한. 다행 이군. – Jimmyt1988

+0

@zerkms 그렇다면 문자 그대로 "null"을 선택할 수 있습니까? 나는 아무도 이것을 한 번도 본 적이 없으며, 내가 한 번 들어 본 적이 없다. – Tony318

0

WHERE EXISTSWHERE NOT EXISTS 하위 쿼리가 반환하는 행의 내용을 조사하지 않습니다. 그들은 단순히 어떤 행이 반환되는지 확인합니다 : http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

그래서 하드 코딩 된 널 (일반적으로 "존재하지 않는")을 선택하더라도 MySQL은 해당 널을보고 있지 않습니다. 그 null을 포함하고 그것을 "hey, that exists"로 평가합니다.

+0

분명히 그는 논리적 인 하나가 아니라 질의에 문법적인 오류가 있습니다. – zerkms

+0

그래서 말하고있는 것입니다. select 문이 올바른 것입니다. 다른 일이 잘못 됐어? – Jimmyt1988