簡體   English   中英

MySQL按一列對行進行分組,按另一列進行排序

[英]MySQL group rows by one column sorting by another column

我正在開發一個PHP腳本,並且具有下表:

+----+-----------+----------+--------------+
| id | id_parent | position |  feature     |
+----+------------+---------+--------------+
| 1  |     1     |    2     |   -B-A-C-    |
| 2  |     1     |    3     |   -B-C-      |
| 3  |     2     |    4     |   -C-B-      |
| 4  |     3     |    1     |   -A-B-      |
| 5  |     1     |    6     |   -A-C-      |
| 6  |     2     |    5     |   -C-B-      |
| 7  |     2     |    7     |   -B-C-      |
| 8  |     3     |    8     |   -A-        |
+----+-----------+----------+--------------+

從該表中,我想選擇所有具有“功能”的行,例如“%-A-%”,但首先顯示結果的最低“位置”,然后顯示所有具有相同值的列“ id_parent”第一個結果,然后是第二個最低“位置”的行,以及所有具有相同結果“ id_parent”的行,第二個最低“位置”的行,依此類推……因此最終結果應為:

+----+-----------+----------+--------------+
| id | id_parent | position |   feature    |
+----+------------+---------+--------------+
| 4  |     3     |    1     |   -A-B-      |
| 8  |     3     |    8     |   -A-        |
| 1  |     1     |    2     |   -B-A-C-    |    
| 5  |     1     |    6     |   -A-C-      |
+----+-----------+----------+--------------+

由於某些原因,我在這里無法解釋,我需要具有HAVING子句來選擇正確的“功能”值(...具有“功能”之類的“%-A-%”...。)。

是否有可能使用MySQL(可能沒有子查詢)或通過使用PHP處理數據結果來實現所有這些?

這有幫助嗎? 我把問題的最后一部分留給讀者作為練習。

SELECT a.*
     , c.* 
  FROM my_table a 
  JOIN 
     ( SELECT id_parent, MIN(position) position FROM my_table WHERE feature = 'a' GROUP BY id_parent ) b 
    ON b.id_parent = a.id_parent 
   AND b.position = a.position 
  JOIN my_table c 
    ON c.feature = a.feature 
   AND c.id_parent = a.id_parent;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM