2017-08-03 30 views
0

我正在開發一個PHP腳本,我有如下表:MySQL的組行一級排序由另一列

+----+-----------+----------+--------------+ 
| 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-  | 
+----+-----------+----------+--------------+ 

從這個表,我想選擇所有與「功能」的行LIKE「%-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子句來選擇正確的「功能」值(... HAVING'功能'LIKE'%-A-%'...)。

是否有可能使用MySQL(可能沒有子查詢)或通過使用PHP處理數據結果來做到這一切?

+0

這是一個倒退的過程。這是一個糟糕的設計。如果您有多個功能,請考慮將它們標準化存儲在單獨的表格中 - 每個功能都有一個單獨的行。 – Strawberry

回答

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; 
+0

嗨,我改變了我的答覆,因爲我的實際需要是使用LIKE作爲「功能」列,而不是簡單=比較。 –

相關問題