rumnum in sql INNER JOIN?

时间:2011-10-18 19:24:23

标签: php mysql codeigniter join

我希望在以下查询选择中使用rownum,我在下面的第一个查询中使用它是真的,但在下面的第二个查询中不知道如何使用它?

第一个有效的查询:

$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 
")

我在foreach上的html代码中回显了rownum上面的内容: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 个答案:

答案 0 :(得分:1)

尝试这一点,只需将@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

答案 1 :(得分:0)

怎么样:

$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 
")