人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL5.0.95で以下の条件をひとつのクエリで可能なのでしょうか?

1. a_id は "2" のレコード
2. a_no が "1" のレコードを必ず含める
3. a_rate が小さい順(昇順)
4. LIMIT は 3 件

2.の条件を組み込むことができずにいます。
どのように書けばいいでしょうか?
テーブル構造と希望の出力配列は補足に記入してあります。
よろしくお願いします。

●質問者: appfb
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

テーブル名:a_table(pkey a_id, a_no)

a_id(int), a_no(int), a_rate(float), a_value(varchar)
 2, 1, 0.98, あああ
 2, 2, 0.56, いいい
 2, 3, 0.00, ううう
 2, 4, 0.68, えええ
 2, 5, 0.54, おおお
 3, 1, 0.72, かかか
 3, 2, 0.76, ききき
 .....

取り出したい配列

Array
(
[0] => Array
(
[a_id] => 2
[a_no] => 3
[a_rate] => 0.00
[a_value] => ううう
)
[1] => Array
(
[a_id] => 2
[a_no] => 5
[a_rate] => 0.54
[a_value] => おおお
)
[2] => Array
(
[a_id] => 2
[a_no] => 1
[a_rate] => 0.98
[a_value] => あああ
)
)

1 ● Sampo
●100ポイント ベストアンサー

a_noが1の場合だけa_rateを-1にでも読み替えてしまえば、a_rate昇順の上から3件で取れますよね。

SELECT 
 a_id, a_no, 
 CASE a_no WHEN 1 THEN -1 ELSE a_rate END AS a_rate_modified, 
 a_value
FROM a_table
ORDER BY a_rate_modified
LIMIT 0,3

とこんな感じです。


appfbさんのコメント
はーーー! そんなことができるのですか ・・・ 。 毎度毎度ありがとうございますm(_ _)m 早速試してみます。

appfbさんのコメント
恐れ入りましたm(_ _)m パーフェクトでございます。 CASE ってとても便利ですね。 また新しいことを覚えられてうれしいです。 感謝します。 ところで素朴な疑問なんですが、前回いただいた回答で LIMIT の後ろにセミコロンがついていますが今回はついていません。 http://q.hatena.ne.jp/1377483373 前回のセミコロンはあってもなくても動いているのですが、何か意味があるのでしょうか?
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ