对于约会应用程序,我有几张表,我需要查询两个查询的LIMIT 10组合的单个输出。目前看起来很难做到,尽管分开查询它们并不是一个问题,但LIMIT 10将不起作用,因为数字并不准确(例如,不是限制5和限制5,一个查询可能返回0行,而另外10个,取决于情景)。MySQL - 将两条select语句有效地组合到一个结果中
members table
member_id | member_name
------------------------
1 Herb
2 Karen
3 Megan
dating_requests
request_id | member1 | member2 | request_time
----------------------------------------------------
1 1 2 2012-12-21 12:51:45
dating_alerts
alert_id | alerter_id | alertee_id | type | alert_time
-------------------------------------------------------
5 3 2 platonic 2012-12-21 10:25:32
dating_alerts_status
status_id | alert_id | alertee_id | viewed | viewed_time
-----------------------------------------------------------
4 5 2 0 0000-00-00 00:00:00
想象一下,你是Karen和刚刚登录,您应该看到这些2项:
1. Herb requested a date with you.
2. Megan wants a platonic relationship with you.
在一个查询与10 LIMIT相反这里是需要结合两个查询:
1. Herb requested a date with you.
-> query = "SELECT dr.request_id, dr.member1, dr.member2, m.member_name
FROM dating_requests dr
JOIN members m ON dr.member1=m.member_id
WHERE dr.member2=:loggedin_id
ORDER BY dr.request_time LIMIT 5";
2. Megan wants a platonic relationship with you.
-> query = "SELECT da.alert_id, da.alerter_id, da.alertee_id, da.type,
da.alert_time, m.member_name
FROM dating_alerts da
JOIN dating_alerts_status das ON da.alert_id=das.alert_id
AND da.alertee_id=das.alertee_id
JOIN members m ON da.alerter_id=m.member_id
WHERE da.alertee_id=:loggedin_id AND da.type='platonic'
AND das.viewed='0' AND das.viewed_time<da.alert_time
ORDER BY da.alert_time LIMIT 5";
同样,有时两个表可以是空的,或1个表可以是空的,或两者充分(其中在LIMIT 10个踢)和按时间排序。关于如何使查询有效执行此任务的任何想法?想法,建议,编钟,优化是值得欢迎的。
如果这两个查询返回的列是相同的,请使用['UNION'](http://dev.mysql.com/doc/refman/5.6/en/union.html)加入它们并使整个对执行“LIMIT”的外部查询提供子查询。否则,可以通过(10减去第一个查询返回的记录数)确定必需的“LIMIT”,以应用于第二个查询 - 可能最容易的方法是使用您用来调用查询的任何语言。 – eggyal 2012-04-25 21:52:24
用您的预期结果创建一个表格。你会在那里看到问题。 – 2012-04-25 22:05:43
无法将2个查询与不同的选择列表组合在一起。 – vyegorov 2012-04-25 22:08:56