2017-10-31 11 views
0

私はいくつかのidを持つ単純なPHP文字列を持っています。文字列 "1,5,3,7"を基にしたSQLクエリ - >結果の順序を保つ

$string = "10, 5, 10, 3"; 

文字列に保存されているIDの順序を失うことなく、これらのIDに基づいていくつかのSQLをフェッチしたいと考えています。私がしようと試み:

SELECT * FROM media WHERE ID IN ($string); 

が、結果は現在注文されており、二重のidのは、私はこの

row0 : id=>10, 
    row1 : id=>5, 
    row2 : id=>10, 
    row3 : id=>3 

のような行を取得するためにMYSQLを使用することができますどのように

output array: 3, 5, 10 

を行っているがありますすべてのIDのクエリを実行せずにこれを行う方法?

ここで私のテーブル構造はメディアと呼ばれています。アップロードされた画像+説明+メタデータを保存するためのものです。

id, int 
    file, varchar 
    description_de, varchar 
    description_en, varchar 
    size, varchar 
    width, int 
    height, int 

テーブルがあり、プロジェクトのイメージIDだけが格納されているテーブル "projects"があります。その構造は複雑である。誰もここで知る必要はありません。私はこのようなメディアIDを格納するフィールド "メディア"をtheres: "1,5,33,9,10,1" 2つのものを格納する。最初に画像の注文が表示されます。画像ID自体をSECONDにします。

メディアからすべてのフィールドを基本的に取得するためには、右のORDERでイメージを取得する必要があります。

+0

テーブルからの実際のレコードと予想されるレコードをIDの検索順に転記できますか? –

+0

ですので、id(int)、file(varchar)、description(varchar)のテーブル "media"があります。記述を伴う画像を格納するためのテーブル...いくつかのIDを持つ$文字列は、テーブル "プロジェクト"の一部であり、ここではwanaは指定された順序でこれらの画像を保存します。だから、私は、クエリは、ID、ファイル、および説明を含む行の配列の結果を期待しています。私はちょうどイメージリストの順序を維持する必要があります...そして二重のイメージがある場合 - 私はこれらを減らすwanaをしません... – scco

+0

私は私のポストにいくつかのより多くの情報を加えました...それが役立つことを願って – scco

答えて

0

PHP側で処理する方が優れています。一意のIDをmysqlクエリに渡し、必要に応じてデータを整形します。

$x = [['id'=>10, 'name'=>'a'], ['id'=>3, 'name'=>'b'], ['id'=>5, 'name'=>'c'] ]; 
$order = [10,3,5,10,3,5]; 

$result = []; 
foreach($order as $k => $v){ 
    foreach($x as $x_a){ 
    if($x_a['id'] == $v){ $result[$k] = $x_a; break; } 
    } 
} 
print_r($result); 
+0

ああ、それはインスピレーションです。あなたはフェッチするために単にクエリを実行してから、もう一度それを注文する必要があると思います。そうですか。 – scco

+0

はい、もし私がこれをやっていたら、私はその方法が好きです。 –

+0

ありがとう、それは箱の外で働く、私はちょうど$の配列に$文字列を爆発しなければならなかった。悪い私は8日にforeachループを取得しないでください - 夜のコーディングコーディング: – scco

関連する問題