MySQLデータベースから取得する行IDのPHP配列があります。結果をSQLで手動で指定する方法はありますか?
$ids = array(35, 20, 1, 5);
私はIDのその特定の順序で行を使用してデータベースからリソースを取得するSQLクエリを構築する可能性のある方法はありますか?
つまり、返される行のリストは、最初にIDが35の行、次にIDが20の行などとなります。
MySQLデータベースから取得する行IDのPHP配列があります。結果をSQLで手動で指定する方法はありますか?
$ids = array(35, 20, 1, 5);
私はIDのその特定の順序で行を使用してデータベースからリソースを取得するSQLクエリを構築する可能性のある方法はありますか?
つまり、返される行のリストは、最初にIDが35の行、次にIDが20の行などとなります。
は、これであなたの目標が何であるか、この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).'\')' ;
+1、私は 'field()'を使って答えようとしていましたが、 'find_in_set()'は便利です。準備された文とバインドされたパラメータを使ってリストを簡単に与えることができるからです。 – goat
ありがとう!これはうまく動作します。 – dangerChihuahua007
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
'ORDER BY CASE'を使用してください。 'UNION'の束をすることは好まれません。 –
@Michael - これも私の最初の考えでしたが、私は思ったのですが、 "id in(const list)"を索引で4つのフェッチに最適化するのは賢明ですか?それは完全なテーブルスキャンを行いませんか?わからない、後でチェックする。 –
最初のものは動作しません。ソート順は未定義です。 – usr
をお試しください? – rkmax
結果が返ってきたら、PHPでソート順を修正してみませんか? –
最近閲覧したページのIDのjavascriptリストがあります。これは個々のブラウザのクッキーに保存されます。私はこれらのオブジェクトをつかむためにAJAXを使用し、ページが表示された順序を保持することは素晴らしいことです。 – dangerChihuahua007