MySQL: 4 Tablo "-çok-through var"

2 Cevap php

Sahipleri, Kamyon, Kutular, Elmalar: Diyelim ki (örneklere 'uğruna) 4 tablolar şu var diyelim.

Sahibi birçok kamyon olabilir, bir kamyon birçok kutuları olabilir ve bir kutu çok elma olabilir.

Sahipleri bir kimliği var. Ağır bir kimliği ve owner_id var. Kutular bir kimliği ve truck_id var. Elmalar bir kimliği ve box_id var.

Diyelim ki = 34 id ile bir sahibi tarafından "sahibi" tüm elma almak istiyorum diyelim. Yani sahibi 34 sahibi olduğu kamyonlarda bulunan kutularda tüm elma almak istiyorum.

Bir "hiyerarşi" Orada her yalnızca, doğrudan "üst" referans var 4 tablo olacak eğer. Diğer 3 tablolar genelinde koşulları sağlayan ve hızlı bir şekilde nasıl kutularını filtre?

Ben biraz mantıklı umuyoruz.

Teşekkürler.

2 Cevap

Sadece "üst" (sahipleri) başlayacak ve istediğiniz yere elde edene kadar katılmadan tutmak:

SELECT a.*
FROM Owners o
INNER JOIN Trucks t ON t.owner_id = o.id
INNER JOIN Boxes b on b.truck_id = t.id
INNER JOIN Apples a on a.box_id = b.id
WHERE o.id = ?

Böyle sorgular genellikle ihtiyaç vardır ve çok büyük veri setleri ile çalışıyorsanız, bazen de verileri biraz denormalize mantıklı. Elma tabloya owner_id ekleyerek Örneğin,. Bu biraz daha zor verileri güncelleyerek / ekleme yapar, ama sorgular kolay yapabilirsiniz.

    SELECT a.*
      FROM Apples a
INNER JOIN Boxes b ON b.id = a.box_id
INNER JOIN Trucks t ON t.id = b.truck_id
INNER JOIN Owners o ON o.id = t.owner_id
     WHERE o.id = 34

Sen sahiplerine katılmak dışarı bırakarak ve daha sonra sahibi hakkında herhangi bir bilgiye ihtiyacınız yoksa, sadece burada t.owner_id = 34 seçerek biraz bu kolaylaştırabilirsiniz.