好的,所以我已经有了一个相当复杂的SQL语句来获取我的信息,但我需要为它添加其他内容。
基本上,这些项目会计算文件的数量,还会计算与之相关的文件类型(以及其他内容)...
我还需要获取布局规划和演示文稿的最新文件的ID作为另一个单独的字段
SELECT
items.*,
designers.name AS designer,
locations.name AS location,
COUNT(DISTINCT files.id) AS files,
SUM(files.type = 'floorplan') AS floorplans,
SUM(files.type = 'presentation') AS presentations,
SUM(files.type = 'photo') AS photos
FROM
items
LEFT JOIN designers
ON items.designer_id = designers.id
JOIN locations
ON items.location_id = locations.id
LEFT JOIN files
ON (items.id = files.item_id)
WHERE items.location_id = 8
GROUP BY items.id
我已经查看了有关加入另一个表的最新行的其他QA,但它们基于没有加入开头,并且使用我现有的查询,我不知道从哪里开始。我仍然需要文件计数,我不能两次加入表。
总而言之,我需要所有这些以及最新布局规划和最新演示文稿的ID。文件有一个包含unix时间戳的date_uploaded列。
答案 0 :(得分:1)
如果您只需要基于文件类型的文件ID,则CASE
GROUP_CONCAT
ORDER BY
和SUBSTRING_INDEX()
中的SELECT ...,
SUBSTRING_INDEX(
GROUP_CONCAT(
CASE
WHEN files.type = 'floorplan'
THEN files.id
ELSE NULL
END ORDER BY date_uploaded DESC
) ,',',1) AS floorplans_fileid,
SUBSTRING_INDEX(
GROUP_CONCAT(
CASE
WHEN files.type = 'presentation'
THEN files.id
ELSE NULL
END ORDER BY date_uploaded DESC
) ,',',1) AS presentations_fileid
...
FROM ...
只能选择最新的
{{1}}
这样,您可以根据条件
获得最新的文件ID,而不是行