私は、0または300以上の行の総数を取得するmysqlクエリを持っており、一部の行をまとめてグループ化するクエリが必要な場合を除いて正常に動作します。ここで複数の値を1つにまとめるmysqlクエリ
はテーブルです:
+------------------------------+---------------------+------------+
| 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
私はこのように見えるように上記のクエリからreultsテーブルが必要になります。
+------------------------------+---------------------+-------+------+
| 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でregexを使うことができますか?
感謝:)
クエリの後に「結果を歪ませる」のはなぜですか?あなたのクエリは上品です。最初に " - "を含まない結果をループして、色のリストを作成し、 " - "を含むものをループし、関連する "基本色"を更新します。 –
代わりに、あなたはあなたのGROUP BY句で文字列操作をするでしょう... – CBroe