Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从mysql值构造URL(自动过程)_Php_Mysql_Url_Tree - Fatal编程技术网

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

Php 如何从mysql值构造URL(自动过程),php,mysql,url,tree,Php,Mysql,Url,Tree,我有一个简短的问题。请看我的mysql表的部分: --------------------------------------------------------------------- | ID | PARENT | URL | NAME | --------------------------------------------------------------------- | 1 |

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

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子句的最后一部分,这取决于您希望从查询中得到什么

然后在代码中使用它来构建url


您甚至可能不需要WHERE子句的最后一部分,这取决于您想从查询中得到什么。

看起来不是很直观,我想:

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>

编辑:用IF替换case

看起来不太直观,我想:

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

这上面写满了安全威胁。所以不可能得到这样的结果?是否可以更改您的表架构?还是你一直坚持这种模式设计?我一直坚持这种模式设计。可能我设计的表不正确,但现在进行任何更大的更改都为时已晚。这上面写满了安全威胁。所以不可能得到这样的结果?是否可能更改表架构?还是你一直坚持这种模式设计?我一直坚持这种模式设计。也许我设计的桌子不太合适,但是现在做任何更大的改变都太迟了。谢谢,但是如果我不知道最后一个元素有多深的话?是否可以创建一个自动检查并创建正确路径/url的查询?@Jakub您可能需要在服务器端代码的某个地方执行此操作。谢谢,但如果我不知道最后一个元素有多深?是否可以创建一个自动检查并创建正确路径/url的查询?@Jakub您可能需要在服务器端代码的某个地方执行此操作。