對於約會應用程序,我有幾張表,我需要查詢兩個查詢的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