前提
任意の条件を満たす商品の組み合わせを抽出したい
実現したいこと
itemsテーブル
id | name | price | weight |
---|---|---|---|
1 | pen | 100 | 11.5 |
2 | note | 150 | 8.3 |
3 | paper_clip | 40 | 1.3 |
4 | glue | 210 | 17.1 |
5 | eraser | 110 | 4.0 |
6 | compasses | 320 | 4.9 |
■流れ
①条件を選択して検索
└条件はprice「〜円まで」とweight「〜gまで」のいずれか、またはその両方
②①の条件を満たす組み合わせを抽出する
③②の結果からランダムで1つの組み合わせを返す
例1)price「250円まで」, weight「指定なし」
⇨[1, 2], [1, 3, 5], [2, 3], [3, 4], [3, 5]
例2)price「指定なし」, weight「〜12gまで」
⇨[1], [2, 3], [3, 5, 6], [5, 6]
例3)price「250円まで」, weight「〜12gまで」
⇨[1], [2, 3], [3, 5]
お力添え願いたいこと
②のSQL文
手段A.②で組み合わせをSQLで抽出してから、③をLaravelでランダムに抽出する
手段B.②③を同時にSQLで抽出する(技術的に可能?)
参考
サイゼリヤ1000円ガチャ( https://saizeriya-1000yen.marusho.io/ )
試したこと
ORDER BY RAND();でランダムに全件抽出し、抽出結果が条件を満たしているかを判別
満たす:成功
満たさない:もう一度SQLを回す(場合によってはなかなか終わらない)
⇨非常にナンセンスな書き方のため、一発で出せるSQL文はないか気になりご質問させていただきました。