商品名と日付で複数入力可能な検索機能を作成しており、
PHPにて以下のSQLを自動生成するようにしています。
入力 > りんご,2020-04-16 > みかん,2020-05-02 > レモン,2020-03-12
SQL
1SELECT p.* 2FROM ( 3 SELECT * 4 FROM( 5 SELECT * FROM product 6 WHERE product = 'りんご' AND sold_date <= '2020-04-01' 7 ORDER BY product , sold_date DESC 8 limit 1 9 ) 10 11UNION ALL 12 13SELECT p.* categories.* 14FROM ( 15 SELECT * 16 FROM( 17 SELECT * FROM product 18 WHERE product = 'みかん' AND sold_date <= '2020-05-01' 19 ORDER BY product , sold_date DESC 20 limit 1 21) 22 23UNION ALL 24・ 25・ 26・ 27) AS p
入力された商品名かつ指定された日付より古い最新のものを1件取得するSQLで、
入力の件数に応じてSELECT文をUNION ALLで接続しています。
結果としては欲しいものが返ってくるのですが、
日付順で勝手にソートされてしまっており、
入力された順番に取ってこれるように修正したいと考えております。
現在の結果 > みかん,2020-05-01,売上,カテゴリー,・・・ > りんご,2020-04-11,売上,カテゴリー,・・・ > レモン,2020-03-12,売上,カテゴリー,・・・ 求める結果 > りんご,2020-04-11,売上,カテゴリー,・・・ > みかん,2020-05-01,売上,カテゴリー,・・・ > レモン,2020-03-12,売上,カテゴリー,・・・
UNION ALLだと順番は変わらないという内容が多いのですが、
UNION前にそれぞれでORDER BYを使用していた場合は順番が変動してしまうのでしょうか。
問題点などご指摘をお願いしたいです。
すみませんが、どうぞよろしくお願い致します。- リスト
回答2件
あなたの回答
tips
プレビュー