如何在MYSQL中的INNER JOIN之前使用WHERE子句过滤表

时间:2015-09-07 17:58:11

标签: mysql regex

在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中的知识不足以做到这一点。

以下是上述示例结果: enter image description here

我在列occ中显示了计数。如您所见,顶行出现一次,因此应该阅读1,而是阅读9,因为整个数据库中有9行具有材料5CCA且没有颜色。下一行出现两次,因此应在两列上阅读2,依此类推。

这是我正在使用的完整文件表: File Table

我的用户表以防万一(当然没有密码): User Table

0 个答案:

没有答案