我有两个表可供查询。在一张表中,有一些字段表示照片上的球员是否死亡/活着、是否在名人堂等。我刚刚添加的字段称为“new_flag”。这表示该照片是否是我的库存中的新照片
如果没有 GROUP BY,结果将如下所示(请注意,有些玩家拥有多个产品/照片)
name firstname lastname hall_of_fame deceased new_flag
---- --------- -------- ------------ -------- --------
EARL AVERILL SR EARL AVERILL SR Y Y Y
BILL TERRY BILL TERRY Y Y N
BILL TERRY BILL TERRY Y Y Y
BILL TERRY BILL TERRY Y Y N
BOBBY DOERR BOBBY DOERR Y N N
BOBBY DOERR BOBBY DOERR Y N N
使用 GROUP BY 时,我的查询如下所示,但它并不总能找到新标志,因为每个玩家可能有多个记录。
SELECT CONCAT(a.firstname,' ',a.lastname) AS name,
a.firstname,
a.lastname,
b.hall_of_fame,
b.deceased,
b.new_flag
FROM vm_product_name AS a,
vm_product_new_attribute AS b
WHERE b.hall_of_fame ='Y'
AND a.product_id = b.product_id
GROUP BY CONCAT(a.firstname,' ',a.lastname)
ORDER BY a.lastname,
a.firstname;
问题是我只希望每个玩家在我的网页上出现一次,但是......如果他们至少有一张新照片,我还想在玩家姓名旁边添加一个"new"图标。我有什么想法可以做到这一点吗?
我知道这不是最佳方法,但它是作为 Joomla/Virtumart 扩展构建的,目前我无法更改数据库结构。
最佳答案
SELECT CONCAT(a.firstname, ' ', a.lastname) AS name, a.firstname, a.lastname,
b.hall_of_fame, b.deceased, MAX(b.new_flag) AS new_flag
FROM vm_product_name AS a
INNER JOIN vm_product_new_attribute AS b
ON a.product_id = b.product_id
WHERE b.hall_of_fame = 'Y'
GROUP BY a.lastname, a.firstname
ORDER BY a.lastname, a.firstname
关于MySQL 选择帮助;子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589950/