2016-03-08 69 views
0

我需要一个3级菜单树(不限制)固定3级菜单树

的tablename = LEVEL1

+-------------+----------------------+ 
| level1_id | name     | 
+-------------+----------------------+ 
|   1 | AIR CONDITIONER  | 
|   2 | TV     | 
+-------------+----------------------+ 

的tablename = LEVEL2

+-------------+----------------------+-----------+ 
| level2_id | name     | level1_id | 
+-------------+----------------------+-----------+ 
|   1 | SPLIT TYPE   |  1 | 
|   2 | WINDOWS TYPE   |  1 | 
|   3 | LCD     |  2 | 
|   4 | PLASMA    |  2 | 
|   5 | MUSIC PLAYER   | NULL | 
+-------------+----------------------+-----------+ 

的tablename = LEVEL3

+-------------+----------------------+-----------+ 
| level3_id | name     | level2_id | 
+-------------+----------------------+-----------+ 
|   1 | AC 0.75 TON   |  1 | 
|   2 | AC 1 TON    |  1 | 
|   3 | WT 0.75 TON   |  2 | 
|   4 | WT 1 TON    |  2 | 
|   5 | LCD 32" UP   |  3 | 
|   6 | LCD 42" UP   |  3 | 
|   7 | PLASMA 32" UP  |  4 | 
|   8 | PLASMA 42" UP  |  4 | 
|   9 | CD PLAYERS   |  5 | 
|   10 | MP3 PLAYERS   |  5 | 
|   11 | CDS     | NULL | 
|   12 | BOOKS    | NULL | 
+-------------+----------------------+-----------+ 

是否有可能犯罪gle mysqli查询获得以下结果? 为了让我确切知道每个分类所属的级别?

+------------------+----------------+-----------------+ 
| LEVEL1   | LEVEL2   | LEVEL3   | 
+------------------+----------------+-----------------+ 
| AIR CONDITIONER | SPLIT TYPE  | AC 0.75 TON  | 
| AIR CONDITIONER | SPLIT TYPE  | AC 1 TON  | 
| AIR CONDITIONER | WINDOWS TYPE | WT 0.75 TON  | 
| AIR CONDITIONER | WINDOWS TYPE | WT 1 TON  | 
| TV    | LCD   | LCD 32" UP  | 
| TV    | LCD   | LCD 42" UP  | 
| TV    | PLASMA   | PLASMA 32" UP | 
| TV    | PLASMA   | PLASMA 42" UP | 
| NULL    | MUSIC PLAYER | CD PLAYERS  | 
| NULL    | MUSIC PLAYER | MP3 PLAYERS  | 
| NULL    | NULL   | CDS    | 
| NULL    | NULL   | BOOKS   | 
+------------------+----------------+-----------------+ 

有点贪婪。有人可以帮我这个问题,以及其中列出所有的名称/ ID其中,当你提出表Level3的是主表和总会有一些数据父ID为NULL

+------------------+------------+------+ 
| name    | tablename | id | 
+------------------+------------+------+ 
| AIR CONDITIONER | LEVEL1  | 1 | 
| TV    | LEVEL1  | 2 | 
| MUSIC PLAYER  | LEVEL2  | 5 | 
| CDS    | LEVEL3  | 11 | 
| BOOKS   | LEVEL3  | 12 | 
+------------------+------------+------+ 

回答

1

。我想你正在做的方式适合你的需求。不过你也应该试试两个表,Id,Name,ParentID只有一个表,你可以去无限的关系。 Parentid是同一表的较高级别ID。

反正这个查询应该适用于你的情况:

“SELECT LEVEL1.name,LEVEL2.name,LEVEL3.name FROM(LEVEL1 RIGHT JOIN LEVEL2 ON LEVEL1.level1_id = LEVEL2.level1_id)RIGHT JOIN LEVEL3 ON LEVEL2.level2_id = LEVEL3.level2_id;'

+0

这很好。 你能帮我解决我添加到问题的顶层菜单吗?许多Thx –

+0

对不起,我不在线只是看到你的问题。在哪种语言,Html,C#,PHP,因为我可以帮助HTML C#? –

+0

嗯,我可以用php脚本(重复查询)自己做,只是想知道是否可以通过使用单个mysql查询来实现,而不是因为这会更有效。我修改了我的问题,并添加了预期的查询结果:) –