【问题标题】:WHERE NOT EXISTS - MYSQL/PHP [duplicate]不存在的地方 - MYSQL/PHP [重复]
【发布时间】:2012-05-31 12:58:35
【问题描述】:

我无法让我的 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 。 ' 在我的表格选择器中丢失。

【问题讨论】:

  • 它给出了什么错误?
  • 通知中的列名是 null 吗?如果是这样,你就有问题了,因为它是reserved word
  • “有什么想法吗?” --- 是的,有一个:修复它
  • @amaidment:不,它只是一个值NULL。对于嵌套在 (NOT) EXISTS 中的查询,SELECT NULL 很常见
  • 能否将var_dump(mysql_error()); 放在mysql_query 之后并在此处发布其输出?

标签: php mysql select not-exists


【解决方案1】:

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

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

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

尝试使用类似的东西。

【讨论】:

  • “你在那个表中有一个名为“null”的字段吗?如果没有,那就是你的问题。” - - 错误的。不是答案
  • 谢谢。其实这就是我想知道的。我提出的方式是否正确。优秀。很高兴我做对了。
  • @zerkms 所以你可以从字面上“选择空”?我从未见过有人这样做,也从未听说过这样做。
  • @Tony318: SELECT NULL 对于EXISTS 表达式很常见,因为它不关心数据。如果 SELECT NULL 让您感到困惑 - 您可以使用 SELECT 1
  • @Tony318:是的,你可以SELECT NULL。只需在您的数据库中尝试:SELECT columnA, columnB, NULL AS columnC FROM TableX ;
【解决方案2】:

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

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

【讨论】:

  • 显然他在查询中有语法错误,而不是逻辑错误
  • 你这么说。选择语句是正确的。只是出了点问题?
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2012-10-18
    • 2013-03-15
    • 2010-10-19
    • 2011-02-02
    • 2014-04-17
    • 1970-01-01
    • 2011-09-19
    • 2018-02-15
    相关资源
    最近更新 更多