2011-10-06 19 views
2

我有一個簡單的問題。請看看我的mysql表的一部分:如何從mysql中構造URL值(自動過程)

--------------------------------------------------------------------- 
| ID  |  PARENT  |  URL  |  NAME  | 
--------------------------------------------------------------------- 
| 1  |  0   |  index |  Home page | 
| 2  |  1   |  offer |  Offer  | 
| 3  |  2   |  map  |  Map   | 
| 4  |  0   |  office |  Office  | 
| 5  |  4   |  contact |  Contact  | 

我應該如何創建一個查詢,得到的東西是這樣的:

<a href="index/offer/map/">Map</a> 

這應該是一個自動查詢,而不是手動建設網址。我希望你明白我的意思。謝謝!

+0

寫了這一切這有安全威脅。 – Petrogad

+0

所以不可能得到這樣的結果? – Jakub

+0

是否有可能改變你的表格模式?還是你堅持這種模式設計? – Kenny

回答

0
SELECT a.name as name, CONCAT(c.url, "/", b.url, "/", a.url) as url 
FROM table a, table b, table c 
WHERE a.parent = b.id AND b.parent = c.id 
     AND a.id = 3; 

然後就在你的代碼中使用它來構建url。

您甚至可能不需要WHERE子句的最後部分(取決於您想要從查詢中獲得什麼)。

+0

謝謝,但如果我不知道最後的元素有多深?是否有可能創建一個查詢,將自動檢查並創建正確的路徑/網址? – Jakub

+0

@Jakub您可能需要在服務器端代碼的某個地方執行此操作。 – Neal

+0

這是否適用於'辦公室/聯繫人'? – jeha

0

看起來不很直觀我猜:

SELECT CONCAT('<a href="', href, '">', label, '</a>') as a FROM 
(
SELECT DISTINCT 
CONCAT(
IF(ISNULL(t1.url), '', t1.url), 
IF(ISNULL(t2.url), '', CONCAT('/', t2.url)), 
IF(ISNULL(t3.url), '', CONCAT('/', t3.url)) 
) AS href, 
IF(ISNULL(t3.name), IF(ISNULL(t2.name), t1.name, t2.name), t3.name) as label 
FROM `test`.`7679298` t1 
LEFT JOIN `test`.`7679298` t2 ON t2.parent = t1.id 
LEFT JOIN `test`.`7679298` t3 ON t3.parent = t2.id 
GROUP BY label) d; 

結果:

<a href="office/contact">Contact</a> 
<a href="index/offer/map">Map</a> 

(編輯:更換CASE通過IF