cakephp2
mysql
まずfindにてjoinし別々のテーブルから取得した値を一つの連想配列都市、変数に入れています。
$test の中身
array(7) { [0] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"1" ["no"]=> string(1)"1" ["date"]=> string(10)"2020-03-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"1" ["no"]=> string(1)"1" ["time"]=> string(5)"4:00" ] } [1] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"2" ["no"]=> string(1)"2" ["date"]=> string(10)"2020-03-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"2" ["no"]=> string(1)"2" ["time"]=> string(5)"2:00" ] } [2] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"3" ["no"]=> string(1)"3" ["date"]=> string(10)"2020-03-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"3" ["no"]=> string(1)"3" ["time"]=> string(5)"3:00" ] } [3] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"4" ["no"]=> string(1)"4" ["date"]=> string(10)"2020-03-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"4" ["no"]=> string(1)"4" ["time"]=> string(5)"1:00" ] } [4] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"5" ["no"]=> string(1)"5" ["date"]=> string(10)"2020-02-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"5" ["no"]=> string(1)"5" ["time"]=> string(5)"10:00" ] } [5] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"6" ["no"]=> string(1)"6" ["date"]=> string(10)"2020-02-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"6" ["no"]=> string(1)"6" ["time"]=> string(5)"8:00" ] } [6] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"7" ["no"]=> string(1)"7" ["date"]=> string(10)"2020-02-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"6" ["no"]=> string(1)"6" ["time"]=> string(5)"8:00" ] } [7] => array(2) { ["Apple"] => array(3) [ ["id"]=> string(1)"8" ["no"]=> string(1)"8" ["date"]=> string(10)"2020-01-01" ] ["Lemon"] => array(3) [ ["id"]=> string(1)"8" ["no"]=> string(1)"8" ["time"]=> string(5)"12:00" ] } }
流れ及び期待結果:
まず結合
2020-03-01,4:00 (id = 1) 2020-03-01,2:00 (id = 2) 2020-03-01,3:00 (id = 3) 2020-03-01,1:00 (id = 4) 2020-02-01,10:00 (id = 5) 2020-02-01,8:00 (id = 6) 2020-02-01,8:00 (id = 7) 2020-01-01,12:00 (id = 8)
その後並び替え @優先度=> 日付 > 時間 > id
2020-01-01,12:00 (id = 8) 2020-02-01,8:00 (id = 6) 2020-02-01,8:00 (id = 7) 2020-02-01,10:00 (id = 5) 2020-03-01,1:00 (id = 4) 2020-03-01,2:00 (id = 2) 2020-03-01,3:00 (id = 3) 2020-03-01,4:00 (id = 1)
※noが外部キーとなってます。ここで同じグループだと定義してます。
被った場合は、idの昇順。
その後元の連想配列に戻す。
といったことをしたいです。
まずconcatを使い結合しようと思いましたが、concatした後にorder byでascすればいいんじゃない?
と思いましたが、そうもいかなかったです。selectでしか使えないようで。
悩み
1.変数の中身に入っている状態から、このような複雑なソートかけるやり方は?又はそもそもそうするべきか?
2.findで取得する時点でsqlをかけれる。この時点でどういったSQLを書けばいいか?order byでconcatが使えるか?※findは気にせず単純にsqlでも結構です。あとからこちらで変換します 。
期待結果を得ることができるsqlを書けますか?
3.別の方法で何かあるか?
2でいったほうが楽かなと思っているので、タイトルは2で書きました。
SQLでどう書けばいいですか?教えてください。
あなたの回答
tips
プレビュー