2016-04-26 224 views
-2

的每一個值,我得到表格數據庫字段(organisations.paths)以下字符串:遍歷字符串

/1/2/3/4

每個數字是機構的名稱,從ID這個數據庫表:

+----+-------------+----------+----------+----------------------+ 
| id | frameworkid | path | parentid |  fullname  | 
+----+-------------+----------+----------+----------------------+ 
| 1 |   1 | /1  |  0 | NYC University  | 
| 2 |   1 | /2  |  0 | Board of directors | 
| 3 |   1 | /1/2/3 |  1 | Math faculty   | 
| 4 |   1 | /1/2/3/4 |  3 | Statistic department | 
| 5 |   1 | /1/2/3/5 |  2 | Linguist department | 
+----+-------------+----------+----------+----------------------+ 

然後我有description table每個組織:

+----+----------+---------+----------------+ 
| id | data | fieldid | organisationid | 
+----+----------+---------+----------------+ 
| 1 | HQ  |  1 |    1 | 
| 2 | advisory |  1 |    2 | 
| 3 | advisory |  1 |    3 | 
| 4 | bottom |  1 |    4 | 
| 5 | advisory |  1 |    5 | 
+----+----------+---------+----------------+ 

如何join只有通過組織都描述表和主表和循環,這在他們的描述HQadvisory?因此,它變成了:

紐約大學,董事,數學教師委員會(統計部門,不需額外顯示,因爲它是描述bottom

+0

使用mysql'IN'來查詢結果 –

+0

只是爆炸你的字符串;連接到你的數據庫;獲取id在爆炸數組中的數據;破壞結果; – Rizier123

+0

你需要更新你的問題,它並不清楚你真正想要什麼。 –

回答

1

您需要使用explodeINjoin PHP和mysql的函數。

$var = "/1/2/3/4"; 

$in = join(" , ", explode("/", ltrim($var, '/'))); 

$sql = "SELECT `dt`.`fullname` FROM `db_table` dt 
     LEFT JOIN `organization` o 
     ON `o`.`organisationid` = `dt`.`id` 
     WHERE `o`.`id` IN ($in) AND (`o`.`data` = 'HQ' OR `o`.`data` = 'advisory')"; 

建立一個循環來獲取名稱並根據需要顯示它們。

+0

我擴展了這個問題,以便在一個問題中提出。還添加了/ 1/2/3/4來自的字段的名稱。 – StartVader

+0

我只是注意到,奧基我也會更新我的答案,因爲你的問題說。 –

+0

只是檢查,讓我知道它是否okey或不。 –