проблема с положением где в запросе (rownum)? - PullRequest
1 голос
/ 17 августа 2011

я использую запрос "codeigniter" и rownum, я хочу поместить WHERE во внутренний запрос, но у меня есть следующая ошибка. как это?

Произошла ошибка базы данных Номер ошибки: 1064

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса около 'WHERE' * '=' 0 ') t, (SELECT @rownum: = 0) r' в строке 7

SELECT @rownum: = @ rownum + 1 rownum, т. * ОТ (ВЫБРАТЬ * ОТ hotel_submits ЗАКАЗАТЬ ПО ID IDC LIMIT 0, 6 ГДЕ * = 1) t, (ВЫБРАТЬ @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");

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Попробуйте:

$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");
1 голос
/ 17 августа 2011

WHERE всегда предшествует LIMIT и ORDER:

ИЗДАНО ДЛЯ ОБСУЖДЕНИЯ

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

...