MySQL将行按一列排序,按另一列排序

时间:2017-08-03 17:26:43

标签: php mysql sorting select group-by

我正在开发一个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-        |
+----+-----------+----------+--------------+

从这个表中我想选择具有“feature”LIKE“%-A-%”的所有行,但首先显示最低“position”的结果,然后显示列“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子句来选择正确的“功能”值(...具有'功能'LIKE'% - A-%'...)。

是否可以使用MySQL(可能没有子查询)或使用PHP处理数据结果来完成所有这些操作?

1 个答案:

答案 0 :(得分:0)

这有帮助吗?我把问题的最后一部分留给了读者......

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;