Rownum в SQL INNER Присоединиться? - PullRequest
1 голос
/ 18 октября 2011

Я хочу использовать rownum в следующем выборе запроса, я использую его true в следующем первом запросе, но не знаю, как использовать его в следующем втором запросе?

Первый запрос, который работает верно:

$this -> db -> query("
SELECT @rownum := @rownum + 1 rownum, 
       t.* 
FROM   (SELECT * 
        FROM   table 
        ORDER  BY id DESC 
        LIMIT  $offset, $coun) t, 
       (SELECT @rownum := 0) r 
")

Я повторяю выше rownum в html-коде на foreach как: echo intval($row -> rownum + $offset)

Второй запрос (я хочу использовать его в этом запросе, как для этого запроса?):

$this -> db -> query("
SELECT tour_foreign.id, 
       tour_foreign.name, 
       tour_foreign_residence.name_re, 
       tour_foreign.service, 
       tour_foreign.date_go, 
       tour_foreign.date_back, 
       tour_foreign.term 
FROM   tour_foreign 
       INNER JOIN tour_foreign_residence 
         ON ( tour_foreign.id = tour_foreign_residence.relation ) 
WHERE  tour_foreign.name LIKE "%' . $find . '%" 
        OR tour_foreign_residence.name_re LIKE "%' . $find . '%"
")

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Попробуйте это, просто добавив @rownum в начало списка SELECT и сброс @rownum в качестве неявного JOIN на конец. Я проверил это на одной из моих баз данных с аналогичным JOIN, и, похоже, он работает правильно.

Кажется странным смешивать явные JOIN с неявным соединением с псевдотаблемой сброса @rownum, но я не знаю способа выполнить явное JOIN там, где нет общего столбца. Если кто-то может улучшить эту ситуацию, пожалуйста, прокомментируйте.

$this -> db -> query("
SELECT
       @rownum := @rownum + 1 rownum,
       tour_foreign.id, 
       tour_foreign.name, 
       tour_foreign_residence.name_re, 
       tour_foreign.service, 
       tour_foreign.date_go, 
       tour_foreign.date_back, 
       tour_foreign.term 
FROM   tour_foreign 
       INNER JOIN tour_foreign_residence 
         ON ( tour_foreign.id = tour_foreign_residence.relation ),
       (SELECT @rownum := 0) r
WHERE  tour_foreign.name LIKE "%' . $find . '%" 
        OR tour_foreign_residence.name_re LIKE "%' . $find . '%"
");

ОБНОВЛЕНИЕ явное JOIN без предложения ON также работает:

FROM   tour_foreign 
       INNER JOIN tour_foreign_residence 
         ON ( tour_foreign.id = tour_foreign_residence.relation )
       JOIN (SELECT @rownum := 0) r
0 голосов
/ 18 октября 2011

а как же:

$this -> db -> query("SELECT @rownum := @rownum + 1 rownum, 
       t.* 
FROM   (SELECT tour_foreign.id, 
       tour_foreign.name, 
       tour_foreign_residence.name_re, 
       tour_foreign.service, 
       tour_foreign.date_go, 
       tour_foreign.date_back, 
       tour_foreign.term 
FROM   tour_foreign 
       INNER JOIN tour_foreign_residence 
         ON ( tour_foreign.id = tour_foreign_residence.relation ) 
WHERE  tour_foreign.name LIKE "%' . $find . '%" 
        OR tour_foreign_residence.name_re LIKE "%' . $find . '%") t, 
       (SELECT @rownum := 0) r 
")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...