1

我想加入 3 个表(t1、t2、t3)。我需要保持 t1(项目及其属性)原样(左连接)。

表 t1 引用 t2 以便为每个 t1.item 检索更多属性。但是,在 t2 中可以有多个 t1.item 引用条目,每个条目都有单独的值,即。item1 (value1,value2), item2 (value3,value4), item1 (value5,value6) 等等。表 t2 包含对 t3 的引用 - t2 有一个名为“style”的列,其属性由需要在 t3 中查找的数字表示(即数字 1 --> property1、数字 2 --> property2 等)。对于手头的任务,我只需要参考编号为“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 引用的项目具有相同的样式,即。item1 (value1, value2, style1), item1 (value3, value4, style1)。在这些项目中,我只想提取一项,即价值最高的一项。首先,我需要检查每个项目的值对并从中检索最高金额,然后我需要比较这两个项目的值。像这样的东西:

(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 BY Casino.casino(name)”语句似乎负责将结果限制为每个 unique_id 仅一行,以防有多个相等的值?示例:(row1 -> 赌场 A,注册,匹配:200,金额:50);row2 -> 赌场 A,注册,匹配:50,金额:200)在这两种情况下,MAX(值)都是 200,但我只需要一个。我认为无论任何值如何,都只保留第一行。

4

0 回答 0