如何从mysql值构造URL(自动进程)

时间:2011-10-06 19:15:42

标签: php mysql url tree

我有一个简单的问题。请查看我的mysql表的一部分:

---------------------------------------------------------------------
|   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>

这应该是一个自动查询,而不是手动构建网址。我希望你明白我的意思。谢谢!

2 个答案:

答案 0 :(得分: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;

然后在代码中使用它来构建网址。

您可能甚至不需要WHERE子句的最后一部分(取决于您想要从查询中获取的内容)。

答案 1 :(得分: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