ГДЕ НЕ СУЩЕСТВУЕТ - 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 не смотрит на этот нуль - он смотрит на строку, содержащую этот ноль, и оценивает его как "эй, который существует",