我有一个简单的问题。请查看我的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>
这应该是一个自动查询,而不是手动构建网址。我希望你明白我的意思。谢谢!
答案 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
)