2011-02-26 57 views
0

我正在使用表格。爲了說明問題:MySQL加入,包括來自返回分隔值的所有值

mysql> SELECT users.id, username, REPLACE(selected_groups, '\r', ', '), groups.id, groups.label FROM users LEFT JOIN groups ON users.selected_groups; 
+----+------------------------+--------------------------------------+------+---------------+ 
| id | username    | REPLACE(selected_groups, '\r', ', ') | id | label   | 
+----+------------------------+--------------------------------------+------+---------------+ 
| 7 | Greg     | 1, 2, 3,        | 1 | Administrator | 
| 7 | Greg     | 1, 2, 3,        | 2 | Member  | 
| 7 | Greg     | 1, 2, 3,        | 3 | Banned  | 
| 8 | Steve     | 1, 2,        | 1 | Administrator | 
| 8 | Steve     | 1, 2,        | 2 | Member  | 
| 8 | Steve     | 1, 2,        | 3 | Banned  | 
| 9 | Steve The Banned Admin | 1, 3,        | 1 | Administrator | 
| 9 | Steve The Banned Admin | 1, 3,        | 2 | Member  | 
| 9 | Steve The Banned Admin | 1, 3,        | 3 | Banned  | 
| 10 | Example man   | 1, 2, 3,        | 1 | Administrator | 
| 10 | Example man   | 1, 2, 3,        | 2 | Member  | 
| 10 | Example man   | 1, 2, 3,        | 3 | Banned  | 
+----+------------------------+--------------------------------------+------+---------------+ 
12 rows in set (0.00 sec) 

正如你所看到的,我有一個用戶表和一個組表。在用戶表內是一個'selected_groups'列,其中相關組使用返回分隔值('\ r')來定義。

問題是我不太確定我如何在標籤字段中返回每個必需的標籤。所產生的輸出在理想情況下是這樣的:

+----+------------------------+--------------------------------------+------+-------------------------------+ 
| id | username    | REPLACE(selected_groups, '\r', ', ') | id | groups.label     | 
+----+------------------------+--------------------------------------+------+-------------------------------+ 
| 7 | Greg     | 1, 2, 3,        | 1 | Administrator, Member, Banned | 
| 8 | Steve     | 1, 2,        | 1 | Administrator, Member   | 
| 9 | Steve The Banned Admin | 1, 3,        | 1 | Administrator, Banned   | 
| 10 | Example man   | 1, 2, 3,        | 1 | Administrator, Member, Banned | 
+----+------------------------+--------------------------------------+------+-------------------------------+ 

你認爲這是可能的,如果是這樣,沒有任何人有任何提示/我的解決方案?

非常感謝, 瑞奇

回答

1

你應該看看group_concat

對於用戶標識和用戶名以及group_concat標籤上的group by子句,它應該做到這一點。

我想是這樣的:

SELECT users.id, username, REPLACE(selected_groups, '\r', ', '), GROUP_CONCAT(DISTINCT groups.label) 
FROM users 
LEFT JOIN groups ON users.selected_groups; 
GROUP BY users.id, username 

(這不是測試,所以也許這將需要一些修改)

編輯:我刪除從查詢中groups.id,因爲它沒有任何意義。

+0

我似乎無法讓它以這種方式工作。在這種情況下,group_concat似乎要做的就是返回每個用戶的所有組標籤(就好像每個用戶在selected_groups字段中都有1 \ r2 \ r3 \ r一樣)。 – 2011-02-26 14:33:58

+0

奇怪,它應該工作......我在接下來的幾個小時內沒有訪問過mysql服務器,但我稍後會檢查。 – krtek 2011-02-26 16:30:51