2012-02-18 14 views
1

MySQLデータベースから取得する行IDのPHP配列があります。結果をSQLで手動で指定する方法はありますか?

$ids = array(35, 20, 1, 5); 

私はIDのその特定の順序で行を使用してデータベースからリソースを取得するSQLクエリを構築する可能性のある方法はありますか?

つまり、返される行のリストは、最初にIDが35の行、次にIDが20の行などとなります。

+0

をお試しください? – rkmax

+1

結果が返ってきたら、PHPでソート順を修正してみませんか? –

+0

最近閲覧したページのIDのjavascriptリストがあります。これは個々のブラウザのクッキーに保存されます。私はこれらのオブジェクトをつかむためにAJAXを使用し、ページが表示された順序を保持することは素晴らしいことです。 – dangerChihuahua007

答えて

3

は、これであなたの目標が何であるか、この1

<?php 
$ids = array(35, 20, 1, 5); 
$q = 'select * from table where id in ('.implode(',',$ids).') order by find_in_set(id, \''.implode(',',$ids).'\')' ; 
+0

+1、私は 'field()'を使って答えようとしていましたが、 'find_in_set()'は便利です。準備された文とバインドされたパラメータを使ってリストを簡単に与えることができるからです。 – goat

+0

ありがとう!これはうまく動作します。 – dangerChihuahua007

3

PHP/Javascriptの端にソートすることは容易になるだろうが、一つの方法では、SQLでそれを行う可能性がどのように頭に浮かぶ:

select * from whatever where id in (35,20,1,5) order by 
case id when 35 then 0 when 20 then 1 when 1 then 2 when 5 then 3 end 
+1

'ORDER BY CASE'を使用してください。 'UNION'の束をすることは好まれません。 –

+1

@Michael - これも私の最初の考えでしたが、私は思ったのですが、 "id in(const list)"を索引で4つのフェッチに最適化するのは賢明ですか?それは完全なテーブルスキャンを行いませんか?わからない、後でチェックする。 –

+0

最初のものは動作しません。ソート順は未定義です。 – usr

関連する問題