ここには同様の質問をするスレッドがたくさんあるようですが、問題を解決するのに役立つスレッドはまだ見つかりません。
他の3つの条件が真でなければならない最小値の行を選択するか、変数()を指定して別の条件セットにフォールバックしuc
、最高価格を選択しようとしています。
Table: level (sample data)
id |price |copies |used |uc
--------------------------------------
1 |7 |10 |10 |charlie01
2 |17 |10 |8 |charlie01
3 |37 |5 |5 |charlie01
4 |47 |10 |9 |charlie01
7 |5 |15 |9 |charlie02
8 |15 |15 |0 |charlie02
9 |35 |15 |0 |charlie02
10 |45 |15 |0 |charlie02
11 |3 |5 |5 |charlie03
12 |13 |5 |5 |charlie03
結果: 編集された結果-charlie01は2である必要があります
VARIABLE |RESULTING ROW
--------------------------
charlie01 |2
charlie02 |7
charlie03 |12
###擬似コードを開始:###
がより小さく、より大きく、等しい場合に最も低い 行を選択します。または結果がない場合(つまり、すべてが等しいことを意味します)等しいおよび等しい場合に最も高い価格の行を選択します。price
used
copies
used
0
uc
VARIABLE
used
copies
used
copies
uc
VARIABLE
SELECT *
FROM level
WHERE
(
used < copies
AND used > 0
AND uc = *VARIABLE*
)
### OR IF NO RESULTS ###
(
used = copies
AND uc = *VARIABLE*
)
ORDER BY price ASC
LIMIT 1
###END擬似コード###
これは私が書いたクエリです(uc
charlie01
例として使用):
SELECT *
FROM (
SELECT *
FROM `level`
WHERE
((
`used` < `copies`
AND `used` > '0'
)
OR
(
`used` = `copies`
))
AND `uc` = 'charlie01'
ORDER BY `price` ASC
) AS T
ORDER BY `used` ASC
LIMIT 1
3
記録があるため、サンプルデータでは機能しませんused = copies
。それの訳はused on record 3 < used on record 2 (the row we want, because it has the lowest price)
MAX()が存在し、最後の1時間使用しようとしましたが、成功しなかったため、実際にはどのように機能するのか理解できていないと思います。何があっても列全体の最大値を選択しているようです。 ...?
今、条件などを追加して輪になって回っていますが、なんらかのタイプのことをする必要があると思いますが、JOIN
どこから始めればいいのかよくわかりません。このクエリについてどう思いますか?
編集:本当に申し訳ありませんが、実際に最低価格を選択しようとしたときに最高価格を言っていることに気づきましたused
。copies
used
copies
乾杯
チャーリー