[迫害者の冒頭-1]私はこの質問が少なくとも10億回は答えられていることを知っていますが、私が求めているものに対するそれらの答えをモデル化しません。私はSQLの専門家ではない、確かだ。私は、SELECT、UPDATE、DELETE、eccのような古典的なコマンドだけで自信を持っています。だから、私を助けたい人に感謝します。私が行うには、私のクエリをしたいと思い何MIN()を使用してコードごとに1レコードのみを選択する(MySQL)
|----|--------|------------|----|----------|---------|---------|------|
| id | code | category | mq | weight | weave | price | show |
|----|--------|------------|----|----------|---------|---------|------|
| 1 | DT450R | carbon | 1 | 450 | plain | 90 | 1 |
| 2 | DT450R | carbon | 2 | 450 | plain | 40 | 1 |
| 3 | DT450R | carbon | 5 | 450 | plain | 75 | 1 |
| 4 | ZX300R | carbon | 1 | 300 | plain | 12 | 0 |
| 5 | ZX300R | carbon | 15 | 300 | plain | 128 | 1 |
| 6 | ZX300R | carbon | 30 | 300 | plain | 92 | 1 |
| 7 | PP120Q | carbon | 3 | 120 | twill | 28 | 1 |
| 8 | PP120Q | carbon | 7 | 120 | twill | 65 | 1 |
| 9 | PP120Q | carbon | 9 | 120 | twill | 49 | 1 |
は、各コードのために、選択することで、最低価格とだけ行:
は、のは、私はこのようなテーブルがあるとしましょうと言いました:| 2 | DT450R | carbon | 2 | 450 | plain | 40 | 1 |
| 4 | ZX300R | carbon | 1 | 300 | plain | 12 | 0 |
| 7 | PP120Q | carbon | 3 | 120 | twill | 28 | 1 |
最初の試みMIN() GIの説明に基づいて( MySQL documentationにVENあるいは、少なくとも、)私はそれを理解し何に:ここSO上this answerに基づいて
$sql = 'SELECT code, weight, weave, MIN(price)
FROM products
WHERE category="carbon" AND show="1"
GROUP BY code
ORDER BY weight ASC';
第二の試み():
$sql = 'SELECT a.code, a.weight, a.price, a.weave
FROM products a
INNER JOIN
(
SELECT code, weight, MIN(price) AS minprice, weave
FROM products
GROUP BY code
)
b ON a.code = b.code AND a.weave = b.weave AND a.price = b.minprice AND AND a.weight = b.weight
WHERE category="carbon" AND show="1"
ORDER BY a.weight ASC';
3回目の試み(ここではSOに基づいてthis other answerに基づく):
$sql = 'SELECT code, weight, weave, price
FROM products
INNER JOIN
(
SELECT MIN(price) price, code, weight, weave
FROM products
GROUP BY code
)
AS MIN ON MIN.code = products.code AND MIN.weight = products.weight AND MIN.weave = products.weave
WHERE category="carbon" AND show="1"
ORDER BY a.weight ASC';
これらの試みのどれも期待された結果を生み出したとは言えません。 3番目のメソッドは何かを出力し、残りの2つは0 matches
を返します。私は2番目と3番目の方法では、クエリにクエリを入れ子にしていますが、なぜそれらが機能しないのかわかりません。
宿題ですが、少なくともあなたは試しています。 3回目の試行は正しいパスですが、派生テーブルのコードと分(価格)以外のものは必要ありません。コードとWHERE price = derived.price –
の元のテーブルに結合できます。最も近い。しかし、サブクエリと 'ON'から' weave'と 'weight'を取り除いてください。 – Barmar
結果に 'id = 4'が含まれているのはなぜですか?あなたのクエリは 'AND show =" 1 "'と言っています。その行には 'show =" 0 "'はありません。 – Barmar