在Stack Overflow的帮助下,我几乎可以从我的数据库中获得所需的结果。
基本上我需要显示一个包含材料列和颜色列的文件列表,其中最常出现的material & colour combo
位于顶部。
以下是代码:
SELECT
fileid,
firstname,
lastname,
filename,
material,
colour,
status,
room,
timesent,
timecomplete,
c_sent,
c_fail
FROM
pro_files
INNER JOIN pro_users ON pro_files.userid=pro_users.userid
INNER JOIN (
SELECT material, colour, count(*) AS occ
FROM pro_files
GROUP BY material, colour
) AS mcCounts USING (material, colour)
WHERE
laser=1
AND status=1
AND yr rlike '.'
AND room rlike '.'
AND "day" rlike '.'
AND timesent > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
ORDER BY
mcCounts.occ DESC,
pro_files.timesent ASC;
这样做会计算整个数据库中material & colour
的出现次数,忽略WHERE子句。
但是返回的结果确实尊重where子句,但由于计数不正确,排序错误。
我已尝试过大量不同的组合和移动线等,但我在MYSQL中的知识不足以做到这一点。
我在列occ中显示了计数。如您所见,顶行出现一次,因此应该阅读1
,而是阅读9
,因为整个数据库中有9行具有材料5CCA
且没有颜色。下一行出现两次,因此应在两列上阅读2
,依此类推。
这是我正在使用的完整文件表: File Table
我的用户表以防万一(当然没有密码): User Table