1

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行目だけが保持されると思います。

4

0 に答える 0