SELECT文で抽出時に複数カラムのソート方法についてご質問します。
SELECT文で抽出時に複数カラムのソート方法についてご質問します。
開発環境は以下になります。
・PHP Version 5.2.11
・MySQL (5.0)
そこでやりたいことです。
レストランの開店時間が、バラバラに入力されるとして
以下のデータがDBに格納されています。
TABLE `reserve`
ID,NAME,DATE1,FLAG1,OPEN1,DATE2,FLAG2,OPEN2,DATE3,FLAG3,OPEN3
1,A店,2010-07-05,0,10:00,2010-07-06,1,12:00,2010-07-07,1,10:00
2,B店,2010-07-06,1,13:00,2010-07-07,1,13:00,2010-07-08,1,13:00
3,C店,2010-07-06,0,11:00,2010-07-07,0,11:00,2010-07-08,1,16:00
4,D店,2010-07-04,1,10:00,2010-07-05,0,10:00,2010-07-06,1,10:00
5,E店,2010-07-06,0,13:00,2010-07-07,1,11:00,2010-07-08,0,13:00
5,F店,2010-07-07,1,10:00,2010-07-08,0,10:00,2010-07-09,1,10:00
・
・
・
種別は
ID:主キー
NAME:VARCHAR
DATE1~3:DATE
FLAG1~3:INT
OPEN1~3:TIME
※FLAG1~3は、0=店休日、1=営業日です。
ここから毎日の開店状態を、早い開店から順番に表示したいのです。
7月7日の開店状態を表示する場合の結果は
2010年07月07日
A店:10:00開店
F店:10:00開店
E店:11:00開店
B店:13:00開店
・
・
・
このように、開店時間が早い順からソートして出力となります。
そこで以下のセレクト文で呼び出してみると抽出はうまくいきました。
SELECT * FROM `reserve`
WHERE `DATE1` = '2010-07-07' AND `FLAG1` =1
OR `DATE2` = '2010-07-07' AND `FLAG2` =1
OR `DATE3` = '2010-07-07' AND `FLAG3` =1
しかし、ソートがうまくいきません。
ORDER BY `TIME1` , `TIME2` , `TIME3` ASC
ORDER BY `TIME1` ASC , `TIME2` ASC , `TIME3` ASC
ORDER BY `TIME1` `TIME2` `TIME3` ASC
そこで、TIME1~TIME3をまとめてインデックスにしてみました。
でもうまくいかないです。
色々と試してみましたがうまくいきません。
根本的に間違えているのでしょうか?
データを取り出してから、PHPでソートをかける方が良いのでしょうか?
PHPでソートをするには、DBから取り出したデータを、連想配列に変換して
ソートしてとなると思いますが。
抽出したデータを表示後、さらに店名でソートして再表示したりという
ことを考えているので、出来ればSELECT文で実現したいと思い、
質問させていただきました。
ご教授いただければ幸いです。
何卒よろしくお願い致します。
お礼
ありがとうございます。 現状はユニークでない場合もありえるので、ユニークになるように調整してから試したいと思います。