我正在开发一个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处理数据结果来完成所有这些操作?
答案 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;