首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合三条mysql语句

组合三条mysql语句
EN

Stack Overflow用户
提问于 2011-11-10 20:44:38
回答 4查看 75关注 0票数 1

我正在尝试简化一些mysql。我有三个选择和三个表:

代码语言:javascript
复制
SELECT pageid FROM thepage WHERE DATE(createdate)='2011-11-09' ORDER BY createdate DESC

SELECT urlid FROM themix WHERE pageid=...

SELECT link FROM theurl WHERE urlid=...

给定一个createdate,它获取所有的pageid,然后转到第二个表,获取这些pageid的所有urlid,然后获取所有这些urlid的链接。我现在正在使用while循环,但我怀疑有一种方法可以将它们连接成一个。

有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-10 20:49:00

代码语言:javascript
复制
SELECT p.pageid
     , u.link
FROM thepage p INNER JOIN themix m
    ON p.pageid = m.pageid
INNER JOIN theurl u
    ON m.urlid = u.urlid
WHERE DATE(p.createdate) = '2011-11-09'
ORDER BY p.createdate DESC

应该能达到我想的效果。如果您只想要唯一的URL,请使用以下命令:

代码语言:javascript
复制
SELECT u.link
FROM thepage p 
  INNER JOIN themix m
    ON p.pageid = m.pageid
  INNER JOIN theurl u
    ON m.urlid = u.urlid
WHERE DATE(p.createdate) = '2011-11-09'
GROUP BY m.urlid
ORDER BY MIN(p.createdate) DESC

Sidenotes

代码语言:javascript
复制
WHERE DATE(p.createdate) = '2011-11-09'

必须扫描整个page表,并为每一行调用DATE()函数。有两个选项可以让它更快:

createdate更改为DATE (从现在的DATETIMETIMESTAMP ),并使用:

代码语言:javascript
复制
WHERE p.createdate = '2011-11-09'

或者保持原样并使用:

代码语言:javascript
复制
WHERE p.createdate >= '2011-11-09'
  AND p.createdate < '2011-11-10'

没有前缀或后缀的表名和列名更好,就像您使用的the一样。这是不是更干净、更清晰(即使没有别名)?

代码语言:javascript
复制
SELECT url.link
FROM page
  INNER JOIN mix
    ON page.pageid = mix.pageid
  INNER JOIN url
    ON mix.urlid = url.urlid
WHERE DATE(page.createdate) = '2011-11-09'
ORDER BY page.createdate DESC
票数 5
EN

Stack Overflow用户

发布于 2011-11-10 20:51:51

你已经在你的帖子评论中收到了一些反馈。您应该真正了解不同类型的sql连接

你想要的东西应该通过这样的方式来实现:

代码语言:javascript
复制
SELECT 
    theurl.link  
FROM 
    thepage  
LEFT JOIN 
    themix 
ON 
    thepage.pageid = urlid.pageid 
LEFT JOIN 
    theurl 
ON 
    theurl.urlid = themix.urlid 
WHERE 
    DATE(thepage.createdate)='2011-11-09' 
ORDER BY 
    thepage.createdate DESC 

您应该使用在这里得到的答案作为学习sql的起点

票数 2
EN

Stack Overflow用户

发布于 2011-11-10 20:50:12

SELECT link from theurl (select urlid from themix (select pageid from where DATE( createdate )='2011-11-09‘ORDER BY createdate DESC))

从and中选择链接为tu,选择tm为tm,页面为tp where tu.id=tm.urlid

tm.pageid=tp.id DATE( createdate )='2011-11-09‘ORDER BY createdate

无论如何,它都会给出结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8079700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档