我有一个 mysql 数据库,其中一个字段中保存了多个 URL(见下文)。我现在需要分离这些 URL,将它们插入到新数据库中,其中每个 URL 都有自己的 ID/行。
不幸的是,到目前为止我只能使用 Substring 将第一个 URL 与其他 URL 分开,并且无法获取以下 URL。
这是此类字段的示例:
www.1234.com
www.435346.com
www.35345567.org
www.9380.net
...etc.
因此该字段中可以有不同数量的 URL。
我可以通过以下方式获得第一个:
INSERT INTO url (url)
SELECT DISTINCT SUBSTRING_INDEX(old_url_field, 'www', 2)
FROM old_table
但我不知道如何获得所有其他人。
感谢您提前提供的帮助。
编辑:
PaparazzoKid 的解决方案对我来说做了一些改变。
我只需要进行一些更改,因为在我的例子中,URL 不是用空格分隔的,而是用换行符 [CHAR(10)] 分隔的,但它工作得很好,你可以在这里找到我的解决方案
http://sqlfiddle.com/#!2/88b882/2
或直接作为下面的代码:
CREATE TABLE tablename (
id INT,
name VARCHAR(80));
INSERT INTO tablename VALUES
(1, 'www.mysite.com
www.anothersite.com
www.siteone.com'),
(2, 'www.sitetwo.net');
我修改后的SQL代码:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, CHAR(10), numbers.n), CHAR(10), -1) url
FROM
(SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6) numbers INNER JOIN tablename
ON CHAR_LENGTH(REPLACE(tablename.name,CHAR(10), ' '))
-CHAR_LENGTH(tablename.name)>=numbers.n-1
ORDER BY
n
最佳答案
这可能会让您朝着正确的方向前进:
使用此临时数据:
CREATE TABLE oldTable (
id INT,
url VARCHAR(80));
INSERT INTO oldTable VALUES
(1, 'www.mysite.com www.anothersite.com www.siteone.com'),
(2, 'www.sitetwo.net');
CREATE TABLE newTable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
oldID INT,
url VARCHAR(100));
此查询有效:
INSERT INTO newTable (oldID, url)
SELECT
oldTable.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(oldTable.url, ' ', numbers.n), ' ', -1) url
FROM
(SELECT 1 n UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN oldTable
ON CHAR_LENGTH(oldTable.url)
-CHAR_LENGTH(REPLACE(oldTable.url, ' ', ''))>=numbers.n-1
ORDER BY
id, n
结果:
SELECT * FROM newTable
id | oldID | URL
----|-----------------------
1 | 1 | www.mysite.com
2 | 1 | www.anothersite.com
3 | 1 | www.siteone.com
4 | 2 | www.sitetwo.net
关于mysql - mysql 查询中的分隔行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785438/