2013-11-29 27 views
2

創建搜索引擎友好的URL我想用表格來創建搜索引擎友好的URL:MySQL查詢到從給定的表結構

Category table

category

Pages table

pages table

我正在嘗試編寫一個mysql查詢,它將使用生成以下輸出的類別表爲頁表中的所有頁面生成URL。

預期輸出繼電器:

expected

這裏是MySQL查詢,我試圖用於產生網址高達4段:

SELECT pg.id AS page_id, p3.id, p1.category AS segment1, p2.category AS segment2, p3.category AS segment3, 
pg.page_name AS PAGE , concat('/', p1.category, '/', p2.category, '/', p3.category, '/', pg.page_name, '/') AS url 
FROM category AS p1, category AS p2, category AS p3, pages AS pg 
WHERE pg.category_id = p3.id 
AND p3.parent_id = p2.id 
AND p2.parent_id = p1.id 

鏈接到SQL Fiddle

+1

你檢出了任何數據庫遞歸嗎?這看起來像一個遞歸練習......只是說' – hanzo2001

+0

@ hanzo2001這是爲cms –

+0

@ mahavir-munot,我相信你不能這樣做的任意URL深度沒有創建存儲過程(這會自動遞歸調用) 。 –

回答

0

不最好的解決方案,但它works

SELECT pagetable.id AS page_id 
, c1.id 
, pagetable.page_name AS PAGE 
, concat( 
    IF(c3.category IS NULL,'','/') 
    , IF(c3.category IS NULL,'',c3.category) 
    , IF(c2.category IS NULL,'','/') 
    , IF(c2.category IS NULL,'',c2.category) 
    , IF(c1.category IS NULL,'','/') 
    , IF(c1.category IS NULL,'',c1.category) 
    , '/' 
    , pagetable.page_name 
    , '/') AS url 
FROM pages AS pagetable 
LEFT JOIN category AS c1 
ON pagetable.category_id = c1.id 
LEFT JOIN category AS c2 
ON c1.parent_id = c2.id 
LEFT JOIN category AS c3 
ON c2.parent_id = c3.id 
+0

它只適用於URL最多4段 –

+1

是的,因爲只有3個連接,你可以添加更多的連接,但就像我說的,它不是最好的解決方案 –

+0

每個人都應該去看看另一個[stackoverflow的問題](http://stackoverflow.com/questions/4345909/mysql-recursion) – hanzo2001