繁体   English   中英

结合三个mysql语句

[英]Combining three mysql statements

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

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循环,但是怀疑有一种方法可以将它们全部合并为一个。

有任何想法吗?

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,请使用以下命令:

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

旁注

WHERE DATE(p.createdate) = '2011-11-09'

将必须扫描整个page表并为每一行调用DATE()函数。 您有两种选择可以使其更快:

createdate更改为DATE (从DATETIMETIMESTAMP更改为现在),然后使用:

WHERE p.createdate = '2011-11-09'

或保持原样并使用:

WHERE p.createdate >= '2011-11-09'
  AND p.createdate < '2011-11-10'

表和列名是没有前缀或后缀,如更好the你。 这不是更干净(甚至没有别名)吗?

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

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

您想要的应该通过以下方式实现:

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的起点

从URL所在位置选择链接(从混合位置选择urlid(从WHERE DATE(createdate)='2011-11-09'ORDER BY createdate DESC的页面选择页面ID))

要么

从theurl作为tu,themix作为tm,页面作为tp进行SELECT链接,其中tu.id = tm.urlid和tm.pageid = tp.id且DATE(createdate)='2011-11-09'ORDER BY createdate DESC

任何方式都会产生结果。

您可以将3个查询嵌套到1个中,并使用IN表达式搜索多个ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM