У меня есть таблица типа:
| Page | Clicks |
| ---------------------------- | ------ |
| example.com/blog/guide-a/ | 3000 |
| example.com/blog/guide-b/ | 1500 |
| example.com/cities/new-york/ | 800 |
| example.com/cities/berlin/ | 600 |
| example.com/cities/london/ | 400 |
| example.com/country/germany/ | 300 |
| example.com/country/austria/ | 500 |
Теперь мне нужен столбец под названием «подпапка». Это должно выглядеть так:
| Page | Clicks | Subfolder |
| ---------------------------- | ------ | --------- |
| example.com/blog/guide-a/ | 3000 | blog |
| example.com/blog/guide-b/ | 1500 | blog |
| example.com/cities/new-york/ | 800 | cities |
| example.com/cities/berlin/ | 600 | cities |
| example.com/cities/london/ | 400 | cities |
| example.com/country/germany/ | 300 | country |
| example.com/country/austria/ | 500 | country |
Любые идеи?
Вы можете сгенерировать этот Контент с помощью SUBSTR_INDEX
Образец
MariaDB [test]> SELECT SUBSTRING_INDEX( SUBSTRING_INDEX('example.com/blog/guide-a/', '/', 2) , '/', -1);
+----------------------------------------------------------------------------------+
| SUBSTRING_INDEX( SUBSTRING_INDEX('example.com/blog/guide-a/', '/', 2) , '/', -1) |
+----------------------------------------------------------------------------------+
| blog |
+----------------------------------------------------------------------------------+
1 row in set (0.000 sec)
Или вы создаете виртуальный постоянный столбец. Он автоматически заполнит новый столбец. Этот образец предназначен для MariaDB. В MySQL синтаксис немного отличается.
Образец
MariaDB [test]> CREATE TABLE `mysubfolder` (
-> `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
-> `Page` VARCHAR(64) DEFAULT NULL,
-> `Clicks` INT(11) DEFAULT NULL,
-> `Subfolder` VARCHAR(64) AS ( SUBSTRING_INDEX( SUBSTRING_INDEX(Page, '/', 2) , '/', -1) ) PERSISTENT,
-> PRIMARY KEY (`id`),
-> KEY (Subfolder)
-> ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.033 sec)
MariaDB [test]> INSERT INTO `mysubfolder` (`id`, `Page`, `Clicks`)
-> VALUES
-> (1, 'example.com/cities/new-york/', 1234 );
Query OK, 1 row affected (0.007 sec)
MariaDB [test]> SELECT * FROM mysubfolder;
+----+------------------------------+--------+-----------+
| id | Page | Clicks | Subfolder |
+----+------------------------------+--------+-----------+
| 1 | example.com/cities/new-york/ | 1234 | cities |
+----+------------------------------+--------+-----------+
1 row in set (0.001 sec)
MariaDB [test]>
Спасибо! Я также обнаружил, что метод Case When... отлично работает и для меня.