Sitemin kullanıcılarını, katkıda bulundukları kitap yorumları ve reçete yorumları sayısına göre sıralamak için bir MySQL sorgusu çalıştırıyorum. Birden çok JOIN sorgusuyla ilk sorunlardan sonra, çok daha hızlı olan bir dizi alt soruna geçtim. Bununla birlikte, her üyeden gelen yorum sayısını ayıklayabilsem de, onları nasıl toplayacağımı anlayamıyorum, böylece toplam sayıya göre sıralayabilirim.Birkaç alt sorgunun sonuçları nasıl eklenir?
SELECT users.*,
(SELECT count(*) FROM bookshelf WHERE bookshelf.user_id = users.ID) as titles,
(SELECT count(*) FROM book_reviews WHERE book_reviews.user_id = users.ID) as bookreviews,
(SELECT count(*) FROM recipe_reviews WHERE recipe_reviews.user_id = users.ID) as recipereviews
FROM users
Ben 'reviewtotals' elde etmek için birlikte bookreviews ve recipereviews eklemeniz gerekir:
İşte şimdiki sorgu var. MySQL, takma adlar üzerinde hesaplamalar yapmak için basit sözdizimini kullanmanıza izin vermez, ancak bunu yapmanın başka bir yolu olduğunu varsayalım mı?
@mandel - benim cevaba bakınız: Ben bu çok özel durumda güvenli olacak tahmin referans. Benim deneyimime göre, MySQL için genellikle sizin gibi bir çok ilişkili alt-gruptan daha hızlıdır. Durumunuzda alt sorgu çözümünün JOIN'den daha hızlı olup olmadığını öğrenmek isterim. Bana haber verebilmen için çok teşekkür ederim. –
JOIN ile olan sorunlarım, felsefeden ziyade deneyimsizlikten geldi. Önceki JOIN, son derece yavaş bir sorguyla sonuçlandı: 9 saniye; Kartezyen bir ürün oluşturuyordu çıktı. Burada SO üzerinde sordum: http://stackoverflow.com/questions/2030032/is-performing-a-count-calculation-slowing-down-my-mysql-query. Alt sorgular yapmaya döndüğümde hız önemli ölçüde gelişti ve ne yaptığımı anlayabiliyordum! – mandel
Hız karşılaştırması için yayınının cevabını görün - JOIN sorgunuz biraz daha hızlıdır, ancak mevcut DB boyutunda saniyenin yalnızca 4/100'ü kadardır. – mandel