【问题标题】:Found difficult to make sql query发现很难做sql查询
【发布时间】:2019-04-13 19:18:29
【问题描述】:

我检查了 $posts_not_to_select 中的数据是简单数组,其他一切都很好,但它显示如下所示的错误:

异常 #0 (Zend_Db_Statement_Exception):SQLSTATE[42000]:语法 错误或访问冲突:1064 您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在 'WHERE entity_id NOT IN (SELECT post_id FROM mst_blog_store_post WHERE NOT stor' 在第 1 行,查询是:SELECT * FROM mst_blog_post_entity ORDER BY created_at DESC LIMIT 1 WHERE entity_id NOT IN(从 mst_blog_store_post 中选择 post_id store_id = 1)

$posts_not_to_selectssql1 = "SELECT post_id FROM mst_blog_store_post WHERE NOT store_id = $storeID";
    $posts_not_to_select12 = $connection->fetchAll($posts_not_to_selectssql1);
    $posts_not_to_select = array();

    foreach ($posts_not_to_select12 as $key => $value){
        $posts_not_to_select[$key] = $value['post_id'];
    }

    "SELECT * FROM `mst_blog_post_entity` ORDER BY `created_at` ASC LIMIT 1 WHERE `entity_id` NOT IN ( '" . implode( "', '" , $posts_not_to_select ) . "' )"

【问题讨论】:

  • 无论您选择何种数据库,所有 SQL 查询都遵循某种形式的语法。如果你忽略你选择的数据库语法,你不会走得太远:-(——而且,你这里的查询似乎比绝对必要的要多。

标签: mysql database


【解决方案1】:
SELECT * FROM `mst_blog_post_entity` WHERE `entity_id` NOT IN ( '" . implode( "', '" , $posts_not_to_select ) . "' )" ORDER BY `created_at` ASC LIMIT 1;

只需在 phpmyadmin 的 SQL 部分运行此查询,一切都会正常运行。

【讨论】:

    【解决方案2】:

    ORDER BYWHERE 子句之后。

    SELECT * FROM `mst_blog_post_entity` 
    WHERE `entity_id` NOT IN ( '" . implode( "', '" , $posts_not_to_select ) . "' )"  
    ORDER BY `created_at` ASC LIMIT 1 
    

    完整的序列是:

    • 选择
    • 来自
    • 加入 [开启]
    • 在哪里
    • 分组依据
    • 按 [限制] 订购

    【讨论】:

    • AND 和 OR 怎么样?我想使用 AND 我可以在那之后使用它吗?
    • @CrackIt 是的,您可以在WHERE 中使用AND/OR
    • 感谢您的大力帮助
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多