【问题标题】:problem with put where in query(rownum)?将查询放在哪里(rownum)的问题?
【发布时间】:2011-10-28 10:19:13
【问题描述】:

我使用“codeigniter”和rownum 查询,我想将WHERE 放入内部查询但出现以下错误。怎么样?

发生数据库错误错误号:1064

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 7 行的 'WHERE '*' = '0' ) t, (SELECT @rownum:=0) r' 附近

SELECT @rownum:=@rownum+1 rownum, t.* FROM ( SELECT * FROM hotel_submits ORDER BY id desc LIMIT 0, 6 WHERE * = 1 ) t, (SELECT @rownum:=0) r

文件名:D:\xampp\htdocs\hdr\system\database\DB_driver.php

行号:330

$this->db->query("SELECT @rownum:=@rownum+1 rownum, t.*
    FROM (
        SELECT *
        FROM hasana_you
        ORDER BY id desc
        LIMIT $offset, $coun_page
        WHERE * = 1 //or $id instead 1
    ) t,
    (SELECT @rownum:=0) r");

【问题讨论】:

    标签: php codeigniter where


    【解决方案1】:

    WHERE 总是在LIMITORDER 之前:

    根据讨论编辑

    SELECT 
        @rownum:=@rownum+1 rownum, 
        t.*
    FROM (
            SELECT 
                *
            FROM 
                hasana_you
            WHERE 
                column_a = 1 OR 
                column_b = 1 OR
                column_c = 1 OR
                column_d = 1 
            ORDER BY 
                id desc
            LIMIT 
                $offset, $count_page
    ) AS t
    

    我在此查询中看到了其他问题(似乎过于复杂,可能不需要子查询),但如果没有您的数据库结构,我无法假设更正它。但是,关键字的规定顺序是主要关注点。

    查看这些关于 SQL 语法和用法各个方面的教程文章:http://www.tizag.com/sqlTutorial/sqlwhere.php

    【讨论】:

    • 因为,在不了解您的数据库结构的情况下,我无法解决与查询有关的其他问题。我可以告诉你WHERE * = 1 无效。我不知道你在那里追求什么。 WHERE 子句的意图是什么?
    • 我想在数据库的所有列中搜索:* = all。这是怎么回事? [搜索所有列值1]
    • 如果要搜索数据库的所有ROWS,只需将WHERE 子句一起删除即可。如果您希望将任何 COLUMN 与 1 匹配,则必须将所有列列为由 OR 运算符分隔的单独子句。 SQL 旨在处理未指定数量的行和已知数量的列。请参阅编辑后的答案。
    • 列数多,另一种解决方法是停止写所有列?
    • 正如我所说,这取决于您要匹配的内容。如果您只想返回所有行,请取消 WHERE 子句。如果您想将列与值进行匹配,您别无选择,只能列出查询中的列。
    【解决方案2】:

    试试:

    $id= 1;
    $f= $this->db->query("SELECT GROUP_CONCAT(column_name,
        \" like '%$id%' OR \" SEPARATOR '') AS str 
        FROM information_schema.columns 
        WHERE table_name='hasana_you'");
    $f1= $f->row();
    $filter= substr($f1->str,0,-4);
    

    已编辑:

    $x= $this->db->query("SELECT * FROM (SELECT @rownum:=@rownum+1 rownum, t.*
    FROM (SELECT @rownum:=0) r,
    (SELECT *
        FROM hasana_you
        WHERE $filter
        ORDER BY id desc
    ) t) x
    ORDER BY id desc
    LIMIT $offset, $count_page");
    

    很难知道你想要过滤器在哪里......也可以是:

    $x= $this->db->query("SELECT * FROM (SELECT @rownum:=@rownum+1 rownum, t.*
    FROM (SELECT @rownum:=0) r,
    (SELECT *
        FROM hasana_you
        ORDER BY id desc
    ) t) x
    WHERE $filter
    ORDER BY id desc
    LIMIT $offset, $count_page");
    

    【讨论】:

    • 这有错误,不工作。错误第一次发布之类的错误
    • 我认为这些问题为您提供了您在代码中实现的部分解决方案...立即尝试
    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 2011-05-31
    • 2012-07-04
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2020-11-09
    相关资源
    最近更新 更多