php - mysql查询将多个值合并为一个

标签 php mysql

我有一个 mysql 查询,它获取 0 或 300 以上的总行数,它工作正常,除了我需要查询将一些行组合在一起。

这是表格:

+------------------------------+---------------------+------------+
| color                        | check_date          | color_code |
+------------------------------+---------------------+------------+
| red                          | 2017-06-20 13:52:18 | 408        |
| green                        | 2017-06-17 19:10:25 | 524        |
| green                        | 2017-06-19 12:17:31 | 314        |
| light-red                    | 2017-06-19 10:51:05 | 227        |
| dark-green                   | 2017-06-25 10:47:50 | 82         |
| dark-blue                    | 2017-06-21 09:23:43 | 0          |
| light-blue                   | 2017-06-20 09:24:50 | 900        |
| yellow                       | 2017-06-19 11:01:46 | 833        |
| medium-yellow                | 2017-06-07 16:07:49 | 0          |
| medium-red                   | 2017-06-16 09:46:38 | 19         |   
| dark-green                   | 2017-06-21 08:47:50 | 822        |
| dark-blue                    | 2017-06-01 15:23:43 | 12         |
| light-blue                   | 2017-06-22 11:24:50 | 900        |
| yellow                       | 2017-06-21 09:23:43 | 8          |
| medium-yellow                | 2017-06-17 14:07:49 | 11         |
| light-blue                   | 2017-06-16 09:46:38 | 19         |
+------------------------------+---------------------+------------+

这是查询:

SELECT color, 
max(check_date) AS check_date, 
count(*) AS total, 
sum( color_code < 1 OR color_code >= 300) AS cnt 
FROM check_colors 
GROUP BY color 
ORDER BY cnt DESC LIMIT 10;

这将返回一个这样的表:

+------------------------------+---------------------+-------+------+
| color                        | check_date          | total | cnt  |
+------------------------------+---------------------+-------+------+
| light-blue                   | 2017-06-22 11:24:50 |   3   |   2  |
| green                        | 2017-06-19 12:17:31 |   2   |   2  |
| dark-green                   | 2017-06-25 10:47:50 |   2   |   1  |
| medium-yellow                | 2017-06-17 14:07:49 |   2   |   1  |
| dark-blue                    | 2017-06-21 08:47:50 |   2   |   1  |
| yellow                       | 2017-06-21 09:23:43 |   2   |   1  |
| red                          | 2017-06-20 13:52:18 |   1   |   1  |
| light-red                    | 2017-06-19 10:51:05 |   1   |   0  |
| medium-red                   | 2017-06-16 09:46:38 |   1   |   0  |
+------------------------------+---------------------+-------+------+

我需要的是一个 mysql 查询,它结合了浅色、深色和中等前缀以及无前缀的颜色。例如,不是将绿色和深绿色作为单独的行,而是将它们组合在一起,颜色列将显示为绿色。结果将是总数:4,cnt:3。

我需要上述查询的结果表如下所示:

+------------------------------+---------------------+-------+------+
| color                        | check_date          | total | cnt  |
+------------------------------+---------------------+-------+------+
| blue                         | 2017-06-22 11:24:50 |   5   |   3  |
| green                        | 2017-06-25 10:47:50 |   4   |   3  |
| yellow                       | 2017-06-21 09:23:43 |   4   |   2  |
| red                          | 2017-06-20 13:52:18 |   3   |   1  |
+------------------------------+---------------------+-------+------+

检查日期会是浅色、深色、中色或无前缀颜色中最近的。

如果我在 mysql 之前或之后在 PHP 中执行此操作,它会扭曲结果,因此必须在 mysql 中。

也许我可以通过某种方式在 mysql 中使用正则表达式?

谢谢 :)

最佳答案

您可以使用 SUBSTRING_INDEX 来执行此操作。

举个例子

表格

value   color
10  light-red
4   red
7   red
2   light-pink
4   dark-pink
6   medium-pink
6   pink


SELECT SUBSTRING_INDEX( color,  '-', -1) AS color, SUM( value )  as Total
FROM count
GROUP BY SUBSTRING_INDEX( color,  '-', -1) 

输出

color   Total
pink    18
red     21

http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php

关于php - mysql查询将多个值合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44674583/

相关文章:

php - 将应答按钮添加到 Twilio 客户端

php - curl sslv3 alert握手失败如何解决?

php - Javascript 检测选择附加到表单的文件的名称,如果用户选择了错误的文件则发出警报

php - Laravel Passport- 保护不同用户类型的路由

php - PDO 使用 WHERE id=6ff 等语句选择 id=6 的行

mysql - 进展 OpenEdge、ODBC、记录集、加入,天哪

MySQL:在三个表中选择

php - 根据字符串相似度获取最长公共(public)子串

c# - 使用 MySQL 后端开发 C# 项目的最佳方法是什么?

php - 如何使用 MySQLi 准备好的语句创建新的 MySQL 数据库用户?