2011-10-18 72 views
1

我想在下面的查询select中使用rownum,我在下面的第一个查询中使用它为true,但不知道如何使用它在下面的第二个查询中?在SQL INNER 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 
") 

我赞同上面的html代码ROWNUM上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 . '%" 
") 

回答

1

试试这个,只需添加@rownumSELECT列表和T的开始他将@rownum重置为隐式JOIN结束。我用一个类似的JOIN对我的一个数据库进行了测试,结果表现正常。

它看上去奇特,隐式混合明确JOIN我们携手反对@rownum复位pseudotable,但我不知道执行明确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 . '%" 
"); 

UPDATE明确JOIN没有ON条款也适用:

FROM tour_foreign 
     INNER JOIN tour_foreign_residence 
     ON (tour_foreign.id = tour_foreign_residence.relation) 
     JOIN (SELECT @rownum := 0) r 
+0

你可以'... CROSS JOIN(SELECT @rownum:= 0)r'或(在MySQL中它工作!)没有'ON'子句的'JOIN':'... JOIN(SELECT @rownum:= 0)r' –

+0

@ypercube我试着'LEFT JOIN没有'ON'子句,这是一个语法错误。你是对的 - 一个直接的'加入'的作品。 –

+0

也可以'a CROSS JOIN b ON a.id = b.id'。 INNER JOIN和CROSS JOIN之间没有区别! –

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