MySQL查询麻烦

时间:2013-05-13 06:51:33

标签: mysql sql

好的,首先我承认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字段中)
  • 将最终TitleUrl合并到结果表中。

我知道它与连接和连接有关,但我肯定迷失了。


SIDENOTE:我既不关心当前数据库的结构,也不关心性能问题。我想要的只是将现有数据从现有数据库(无需更改)传输到我的新网站数据库(以完全不同的格式/结构)。

4 个答案:

答案 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)

Working DEMO

答案 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/%'