3 つのテーブル (t1、t2、t3) を結合したい。t1 (アイテムとそのプロパティ) をそのまま保持する必要があります (LEFT JOIN)。
テーブル t1 は、t1.item ごとにさらに多くのプロパティを取得するために t2 を参照します。ただし、t2 には、それぞれ個別の値を持つ t1.item 参照の複数のエントリが存在する可能性があります。項目 1 (値 1、値 2)、項目 2 (値 3、値 4)、項目 1 (値 5、値 6) など。テーブル t2 には、t3 への参照自体が含まれています。t2 には、t3 で検索する必要がある数値で表されるプロパティを含む「スタイル」という名前の列があります (つまり、数値 1 --> プロパティ 1、数値 2 --> プロパティ 2 など)。当面のタスクでは、参照番号「1」のスタイル プロパティのみが必要です。次のコードはそのトリックを行うようです:
$result = mysql_query("SELECT *
FROM
t1
LEFT JOIN
(t2 INNER JOIN t3 ON t2.id= t3.id)
ON t1.id=t2.id AND t2.type='1'
ORDER BY t1.item $order ");
問題は、同じ t1 refrence を持つ 2 つ以上のアイテムに、同じスタイルが関連付けられている可能性があることです。item1 (value1、value2、style1)、item1 (value3、value4、style1)。これらの項目から、1 つだけ、つまり最も価値の高いものだけを抽出したいと考えています。まず、各項目の値のペアをチェックして、それらの中から最高額を取得する必要があります。次に、これら 2 つの項目の値を比較する必要があります。このようなもの:
(CASE WHEN MAX(t2.column_value1) > MAX(t2.column_value2)
THEN t2.column_value1
ELSE t2.column_value2 END)
これを機能させる方法がわかりません。どんな助けでも大歓迎です。ありがとう
更新:これは今でもうまくいくようです(ただし、改善の提案があればありがたいです):
SELECT casinos.id, casinos.casino,
bonus.amount, bonus.match, bonus_type_lookup.bonus_id,
bonus_type_lookup.bonus_type
FROM casinos
LEFT JOIN
(bonus INNER JOIN bonus_type_lookup ON bonus.bonus_type = bonus_type_lookup.bonus_id) ON casinos.id=bonus.id AND bonus.bonus_type='1' AND ((bonus.amount = (SELECT CASE WHEN MAX(bonus.amount) > MAX(bonus.match) OR (MAX(bonus.match) IS NULL) THEN MAX(bonus.amount) ELSE MAX(bonus.match) END FROM bonus WHERE casinos.id=bonus.id AND bonus.bonus_type='1')) OR (bonus.match = (SELECT CASE WHEN MAX(bonus.amount) > MAX(bonus.match) THEN MAX(bonus.amount) ELSE MAX(bonus.match) END FROM bonus WHERE casinos.id=bonus.id AND bonus.bonus_type='1')))
GROUP BY casinos.casino
ORDER BY
CASE
WHEN bonus.amount > bonus.match THEN bonus.amount
WHEN bonus.match IS NULL THEN bonus.amount
ELSE bonus.match
END DESC
「GROUP BYcasino.casino(name)」ステートメントは、複数の等しい値がある場合に、unique_id ごとに 1 つの行のみに結果を制限するように見えますか? 例: (row1 -> カジノ A、サインアップ、マッチ:200、金額:50); 行 2 -> カジノ A、サインアップ、一致:50、金額:200) どちらの場合も、MAX(値) は 200 ですが、必要なのは 1 つだけです。値に関係なく、1行目だけが保持されると思います。