データを表示する際に自分の好きな順番で表示する方法はありますか?
例えば、フィールド1が5or2or4の3つのレコードをSQL文でWHERE フィールド1 IN ( '5', '2', '4' )で出力した場合に普通に表示すると2,4,5の順番になってしまいます。
どうしても5,2,4(例えなので違う順番の場合もあります)の順番で表示したいのですがどうすればよいでしょうか…
ORDER BYを使うことも出来ず何か良い方法が無いか考えています。
誰か分かる人がいたらお願いします。
一応、PHPも使えるのでPHPで解決するのであればそれでも良いです。
ちょっと強引ですが
-----
select
case フィールド1
when '5' then 1
when '2' then 2
when '4' then 3
end as odr,
フィールド1
from テーブル1
where フィールド1 in ('5', '2', '4')
order by odr;
-----
などとしてはいかがでしょうか?
当方MySQL 5.0では動きました。
>2,4,5の順番になってしまいます。
2,4,5になっているわけではなく、DBに入っている順序が2,4,5なのだと思います。
順番は一切関係なく、検索していって一致した順番で返すので、UPDATE文などを使うと、5,2,4になることもあるでしょう。
レコードのフィールド1が5か2か4であれば選択、と言う事ですから。
>どうしても5,2,4(例えなので違う順番の場合もあります)の順番で表示したいのですがどうすればよいでしょうか…
おとなしく、フィールド1='5'とフィールド1='2'、フィールド1='4'で選択して、結果を順番に表示しましょう。 簡単確実で早いです。
PHPであれば、
$f1array = array(5,2,4);
foreach($f1array as $f1){
mysql_query("sql... where フィールド1='{$f1}'");
出力処理
}
みたいな感じで。
有難う御座いました。
ちょっと強引ですが
-----
select
case フィールド1
when '5' then 1
when '2' then 2
when '4' then 3
end as odr,
フィールド1
from テーブル1
where フィールド1 in ('5', '2', '4')
order by odr;
-----
などとしてはいかがでしょうか?
当方MySQL 5.0では動きました。
ズバリこれでした!!
有難う御座います。
勉強になりました。
表示順を持つ別テーブルと結合して、結合したテーブルの列でソートする方法はいかがですか?
例えば
FROM tbl1 inner join sortOrderTbl on tbl1.フィールド1 = sortOrderTbl.フィールド1
WHERE tbl1.フィールド1 in ( '5','2','4')
ORDER BY sortOrderTbl.ソート順のフィールド
有難う御座いました。
SQL文でWHERE フィールド1 IN ( '5', '2', '4' )で出力した場合に普通に表示すると2,4,5の順番になってしまいます
「order by」の指定がない場合の検索順序は、保証されていません。格納順や「primary key」順といったことも、保証されていません。
「保証していないと言っているが、実は格納順になるのでは?」と実験結果を示したユーザサイトもありますが、「やはり保証されない」という結論になっています。
追加や削除を繰り返せば、「order by」指定が必要なことを、すぐに理解できると思います。
特定の順序で結果を得たいなら、「order by」を指定するしかありません。
select ~ from 表名 where フィールド1 in('5','2','4') order by case フィールド1 when '5' then 1 when '2' then 2 when '3' then 3 end |<
ズバリこれでした!!
有難う御座います。
勉強になりました。