Para una aplicación de citas, tengo algunas tablas que necesito consultar para una sola salida con un LÍMITE 10 de ambas consultas combinadas. Parece difícil de hacer en este momento, aunque no es un problema consultarlos por separado, pero el LIMIT 10 no funcionará ya que los números no son exactos (por ejemplo, no LIMIT 5 y LIMIT 5, una consulta puede devolver 0 filas , mientras que los otros 10, dependiendo del escenario).MySQL - Combinación de dos sentencias select en un resultado con LIMIT eficientemente
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
Imagine que usted es Karen y apenas iniciada la sesión, debe ver estos 2 artículos:
1. Herb requested a date with you.
2. Megan wants a platonic relationship with you.
En una consulta con un límite de 10. En cambio aquí hay dos preguntas que necesitan ser combinada:
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";
una vez más, a veces ambas tablas puede estar vacío, o 1 tabla puede estar vacío, o ambos completo (donde límite de 10 patadas en) y ordenada por tiempo. ¿Alguna idea sobre cómo obtener una consulta para realizar esta tarea de manera eficiente? Pensamientos, consejos, carillones, optimizaciones son bienvenidos.
Si las columnas devueltas por las dos consultas son las mismas, únelas con ['UNION'] (http://dev.mysql.com/doc/refman/5.6/en/union.html) y haga la totalidad Lo que una subconsulta a una consulta externa que realiza el 'LIMIT'. De lo contrario, podría determinar el 'LÍMITE' requerido para aplicar a la segunda consulta desde (10 menos el número de registros devueltos por la primera consulta); probablemente sea más fácil hacerlo en el idioma que esté utilizando para invocar consultas. – eggyal
Crea una tabla con los resultados esperados. Verás el problema allí. –
No es posible combinar 2 consultas con diferentes listas de selección. – vyegorov