0

好的,首先我承认 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-CodeUrls
  • 在表格中搜索http://mize.it/+ (在字段中)CodePostsAddress
  • 将最终结果TitleUrl结果表结合起来。

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


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

4

4 回答 4

3

你应该改变你的 DB-Design,这个查询的性能会很差,因为 mysql 必须进行全表扫描。

尝试在您的 Posts 表中添加一个代码列,该列具有正确的值(在插入/更新时填充它)并向代码添加一个索引(两个表)。

现在你应该可以做到了。

SELECT Posts.Title, Urls.Url
FROM Posts
INNER JOIN Urls ON Post.Code = Urls.Code

更新:

如果 url 的第一部分始终相同,这将起作用

SELECT Post.Title, Urls.Url
FROM Posts
INNER JOIN Urls ON Post.Adress = CONCAT('http://mize.it/', Urls.Code)
于 2013-05-13T06:56:52.583 回答
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)

工作演示

于 2013-05-13T07:02:41.660 回答
0

这是一个不同的方法,我花了一段时间来测试它。

由于您的Address字段包含完整的 url,我们只需要匹配后面的内容,/因此我们可以用任何内容替换实际 url(我假设 url 始终相同)并准备好与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
于 2013-05-13T07:03:49.057 回答
-1

检查以下查询。

select m1.Url, m2.Title from Urls as m1, Posts as m2 

where m2.address like 'http://mize.it/%'
于 2013-05-13T07:04:41.460 回答