MySQL生成帶編號的多級標題
在MySQL中,我們可以使用遞歸查詢和字符串拼接來生成帶編號的多級標題。
首先,我們需要準備一個有層級關系的數據表,例如:
```
CREATE TABLE `article` (
`id` int(11) NOT NULL,
`title` varchar(100) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `article` (`id`, `title`, `parent_id`) VALUES
(1, '一級標題1', NULL),
(2, '二級標題1-1', 1),
(3, '三級標題1-1-1', 2),
(4, '三級標題1-1-2', 2),
(5, '二級標題1-2', 1),
(6, '一級標題2', NULL),
(7, '二級標題2-1', 6),
(8, '二級標題2-2', 6),
(9, '三級標題2-2-1', 8);
```
然后,我們可以使用遞歸查詢來生成帶編號的多級標題,示例代碼如下:
```
DELIMITER //
CREATE FUNCTION `get_article_title`(`article_id` INT)
RETURNS VARCHAR(100)
BEGIN
DECLARE `title` VARCHAR(255) DEFAULT '';
DECLARE `parent_id` INT;
SELECT `title`, `parent_id` INTO `title`, `parent_id`
FROM `article`
WHERE `id` = `article_id`;
IF (`parent_id` IS NOT NULL) THEN
SET `title` := CONCAT(`title`, ' / ', `get_article_title`(`parent_id`));
END IF;
RETURN `title`;
END//
DELIMITER ;
SELECT CONCAT(REPEAT(' ', LENGTH(`title`) - LENGTH(REPLACE(`title`, '-', ''))), `title`) AS `title_with_index`
FROM (
SELECT CONCAT(`id`, '、', `get_article_title`(`id`)) AS `title`
FROM `article`
) AS `temp`
ORDER BY `title`;
```
在上述代碼中,我們首先定義了一個自定義的遞歸函數`get_article_title`,用于獲取某個文章的帶編號的標題。
然后,我們查詢數據表`article`中所有文章的標題和編號,并使用`ORDER BY`語句按照編號順序排序,最后將標題和編號拼接起來,生成帶編號的多級標題。
需要注意的是,在該示例代碼中,我們使用了全角空格代替了普通的空格,以使得標題更加美觀。同時,我們使用了`CONCAT`函數和`REPEAT`函數來生成帶空格的編號。
希望這篇文章能為你提供一些幫助。
上一篇css 文字打豎
下一篇mysql生成工作日歷表