Bir flört uygulaması için, birleştirilmiş sorguların her ikisi de bir LIMIT 10 ile tek bir çıktı için sorgulamam gereken birkaç tablo var. Onları ayrı ayrı sorgulamak bir sorun olmasa da, şu anda yapmak zor görünüyor, ancak LIMIT 10 numaraları tam olarak çalışmaz (ex LIMIT 5 ve LIMIT 5 değil, bir sorgu 0 satır dönebilir diğer 10 ise senaryoya göre). Bunun yerine burada birleştirilmesi gereken iki sorguları 10 bir LIMIT ile tek sorgudaMySQL - İki seçim ifadesini LIMIT ile verimli bir şekilde bir araya getirme
1. Herb requested a date with you.
2. Megan wants a platonic relationship with you.
:
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
bu 2 öğe görmelisiniz, Karen ve sadece giriş yapmış düşünün:
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";
Yine, bazen bu iki tablo boş olabilir ya da 1 tablo boş olabilir ya da her ikisi de tam olabilir (burada LİMİT 10 devreye girer) ve saate göre sıralanır. Bu görevi verimli bir şekilde gerçekleştirmek için nasıl sorgu alacağınıza dair herhangi bir fikir var mı? Düşünceler, tavsiye, çan, optimizasyonlar açıktır.
İki sorgu tarafından döndürülen sütunlar aynıysa, bunları ['UNION'] (http://dev.mysql.com/doc/refman/5.6/en/union.html) ile birleştirin ve tümünü yapın 'LIMIT' işlevini gerçekleştiren bir dış sorgunun alt sorgusu. Aksi takdirde, ikinci sorgunun uygulanması için gerekli olan 'LIMIT' değerini belirleyebilirsiniz (ilk sorgu tarafından döndürülen kayıtların sayısının 10 eksi kadarı) - bu, sorguları çağırmak için kullandığınız herhangi bir dilde bunu yapmak en kolay yoldur. – eggyal
Beklenen sonuçlarla bir tablo oluşturun. Orada sorunu göreceksin. –
2 seçimin farklı seçim listeleriyle birleştirilmesi mümkün değildir. – vyegorov