2011-10-18 17 views
1

次のクエリの選択でrownumを使用します。最初のクエリに続いて使用しますが、2番目のクエリではどのように使用するべきかわかりません。SQLのROWNUM INNER JOIN?

真働くまずクエリ:として私はforeach上のhtmlコードで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 
") 

echo intval($row -> rownum + $offset)

2番目のクエリ(私はこのクエリのためであるか、このクエリでは、そこから使いたいです?):

$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

単にSELECTリストの開始とtに@rownumを追加し、これを試してみてください彼は@rownum暗黙のJOINとして最後にリセットします。私はこれと同様のJOINを持つデータベースの1つに対してこれをテストし、正しく動作するように見えます。これは、暗黙的に明示JOIN Sを混合する独特に見える

@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 . '%" 
"); 

ON句なしUPDATE明示JOINも動作します:

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

あなたが '... CROSSは@rownumを選択します(JOINの可能性:= 0)r'または(MySQLでは動作します!) 'ON'節のない' JOIN': '... JOIN(SELECT @rownum:= 0)r' –

+0

@ypercube' LEFT JOIN 'ON句なしで、構文エラーでした。あなたが正しいです - まっすぐな 'JOIN'が働きます。 –

+0

'a.id = b.id'には' a CROSS JOIN B ON 'もあります。 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 
")