我想加入 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,但我只需要一个。我认为无论任何值如何,都只保留第一行。