2

我无法让我的 NOT EXISTS 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 变量转储 =

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

//解决了::: ' 。$database->db_prefix 。' 在我的表格选择器中丢失。

4

3 回答 3

0

我错过了我的表前缀:'。$database->db_prefix 。'来自评论和通知。问题的原因是我第一次使用不存在..并假设这是不正确的部分。谢谢你所有的时间。这值得庆祝。

于 2012-05-24T22:47:27.493 回答
0

NOT EXISTS的很好。我认为您的选择可能有问题。您在该表中有一个名为“null”的字段吗?如果不是那是你的问题。

我认为您正在寻找类似的东西

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

尝试使用类似的东西。

于 2012-05-24T22:18:42.013 回答
0

WHERE EXISTS并且WHERE NOT EXISTS不要查看子查询返回的行的内容。他们只是检查是否返回了任何行:http: //dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

因此,即使您选择的是通常“不存在”的硬编码空值,MySQL 也不会查看该空值 - 它正在查看包含该空值的行,并将其评估为“嘿,存在” .

于 2012-05-24T22:19:25.060 回答