好的,首先我承认MySQL语法从来都不是我的最强点。所以,我在这里。
网址:
ID Url Code
===============================================
1 http://www.google.com Abcd
2 http://www.freetemplates4u.com Efgh
3 ...
帖子:
ID Title Address
===============================================
1 Some Title 1 http://mize.it/Abcd
2 Some Title 2 http://mize.it/Efgh
3 ...
我想创建一个查询来获取下表
Title Url
=======================================================
Some Title 1 http://www.google.com
Some Title 2 http://www.freetemplates4u.com
用几句话说:
Url
表Code
- Urls
对
http://mize.it/
表格中搜索Code
+ Posts
(在Address
字段中)Title
和Url
合并到结果表中。我知道它与连接和连接有关,但我肯定迷失了。
SIDENOTE:我既不关心当前数据库的结构,也不关心性能问题。我想要的只是将现有数据从现有数据库(无需更改)传输到我的新网站数据库(以完全不同的格式/结构)。
答案 0 :(得分:3)
你应该更改你的DB-Design,这个查询的性能会很差,因为mysql必须做一个完整的表扫描。
尝试在帖子表格中添加代码列,帽子具有正确的值(在插入/更新时填充它)并向代码添加索引(两个表格)。
现在你应该可以做到。
SELECT Posts.Title, Urls.Url
FROM Posts
INNER JOIN Urls ON Post.Code = Urls.Code
<强>更新强>
如果网址的第一部分始终相同,则可以使用
SELECT Post.Title, Urls.Url
FROM Posts
INNER JOIN Urls ON Post.Adress = CONCAT('http://mize.it/', Urls.Code)
答案 1 :(得分:1)
尝试
SELECT p.title,x.url
FROM Posts p
INNER JOIN ( SELECT url, CONCAT('http://mize.it/',code) AS xcode FROM Urls ) x
ON (x.xcode = p.address)
答案 2 :(得分:0)
这是一个不同的approch,我花了一段时间来测试它。
由于您的Address
字段包含完整的网址,我们只需要匹配/
之后的内容,因此我们可以用任何内容替换实际的网址(我假设网址始终相同)并准备好字符串与Code
字段匹配。
SELECT b.Title, a.URL
FROM Url a
LEFT JOIN Posts b
ON a.Code = REPLACE(b.Address, 'http://mize.it/', '')
ORDER BY a.ID ASC
答案 3 :(得分:-1)
检查以下查询。
select m1.Url, m2.Title from Urls as m1, Posts as m2
where m2.address like 'http://mize.it/%'