Как построить URL из значений MySQL (автоматический процесс) - PullRequest
2 голосов
/ 06 октября 2011

У меня быстрый вопрос. Пожалуйста, посмотрите на часть моей таблицы 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. Я надеюсь, вы понимаете, о чем я. Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 октября 2011

Выглядит не очень интуитивно, я думаю:

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)

0 голосов
/ 06 октября 2011
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 (в зависимости от того, что вы хотите получить из запроса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...