mysql联合排序,MySql完全联接(联合)和对多个日期列的排序

A rather complicated sql query that I might be making much more difficult that it should be:

I have two tables:

News:

newsid, datetime, newstext

Picture:

pictureid, datetime, imgPath

The two are not related, I am only joining by the date that the news/picture was created on

SQL so far:

SELECT * FROM news as n LEFT OUTER JOIN (SELECT count(pictureid), datetime

FROM picture GROUP BY DATE(datetime)) as p ON DATE(n.datetime) = DATE(p.datetime)

UNION

SELECT * FROM news as n RIGHT OUTER JOIN (SELECT count(pictureid),

datetime FROM picture GROUP BY DATE(datetime)) as p ON

DATE(n.datetime) = DATE(p.datetime)

I have to use union to simulate a full outer join in MySQL.

The results:

newsid text datetime count() datetime

1 sometext 2011-01-16 1 2011-01-16

2 moo2 2011-01-19 NULL NULL

3 mooo3 2011-01-19 NULL NULL

NULL NULL NULL 4 2011-01-14

The problem being that I obviously end up with two date columns- one from news and one from pictures, this means i cannot order by date and have it be in the correct order! Any ideas? Even if it means restructuring the database! I need date to be in a single column.

The answer came from SeRPRo

The completed working code is:

SELECT `newsid`, `text`,

CASE

WHEN `datetime` IS NULL

THEN `pdate`

ELSE `datetime`

END

as `datetime`,

`pcount` FROM

(

(SELECT * FROM news as n LEFT OUTER JOIN

(SELECT count(pictureid) as pcount, datetime as pdate FROM picture GROUP BY DATE(datetime)) as p

ON DATE(n.datetime) = DATE(p.pdate) ORDER BY datetime

)

UNION

(SELECT * FROM news as n RIGHT OUTER JOIN

(SELECT count(pictureid) as pcount, datetime as pdate FROM picture GROUP BY DATE(datetime)) as p

ON DATE(n.datetime) = DATE(p.pdate) ORDER BY datetime

)

) as x

ORDER BY datetime

解决方案

just using your database structure and your query, and since FULL OUTER JOIN is not available in MySQL, I think a solution could be this:

SELECT

`newsid`,

`text`,

CASE

WHEN `datetime` IS NULL THEN `pdate`

ELSE `datetime`

END as `datetime,

`pcount`

(

SELECT *

FROM `news` as `n`

LEFT OUTER JOIN (

SELECT count(pictureid) as `pcount`, datetime as `pdate`

FROM picture GROUP BY DATE(datetime)

) as p ON DATE(n.datetime) = DATE(p.datetime)

UNION

SELECT *

FROM `news` as `n`

RIGHT OUTER JOIN (

SELECT count(pictureid) as `pcount`, datetime as `pdate`

FROM picture GROUP BY DATE(datetime)

) as p ON DATE(n.datetime) = DATE(p.datetime)

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值