ГДЕ НЕ СУЩЕСТВУЕТ - MYSQL/PHP

Я не могу заставить мое заявление НЕ СУЩЕСТВУЮЩИЙ mysql работать, и это сводит меня с ума теперь:

$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);

Есть идеи?

ОШИБКА:

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:

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

Если я сделаю это:

$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 dump =

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

// решено::: ' . $database->db_prefix . 'отсутствовал в моей таблице селекторов.

3 ответа

Решение

Мне не хватало префикса таблицы: ' . $database->db_prefix . 'из комментариев и уведомлений. Причиной вопроса был первый раз, когда я использовал не существует... и предполагал, что это была часть, которая была неправильной. Спасибо за все ваше время. Это повод для праздника.

Ваш NOT EXISTS Это хорошо. Я думаю, что это может быть проблема с вашим выбором. У вас есть поле с именем "null" в этой таблице? Если нет, то это ваша проблема.

Я думаю, что вы ищете что-то вроде

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

Попробуйте использовать что-то подобное.

WHERE EXISTS а также WHERE NOT EXISTS не смотрите на содержимое строк, возвращаемых подзапросом. Они просто проверяют, возвращаются ли ЛЮБЫЕ строки: http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

Таким образом, даже если вы выбираете жестко запрограммированный ноль, который обычно "не существует", MySQL не смотрит на этот нуль - он смотрит на строку, содержащую этот ноль, и оценивает его как "эй, который существует",

Другие вопросы по тегам