BU BİR DAHA İYİ VE
Kullanıcı "bobince" neredeyse vardı küçüktür. Bunu anladım ve benim için çalışmasını sağladım çünkü en çok MySQL deneyimim var. Ancak, bobince'nin cevabının neden insanları korkutabileceğini görebiliyorum. Sorgusu eksik. İlk önce mysql değişkenlerine parent_left ve parent_right öğesini seçmeniz gerekir.
altında iki sorgular tablo sağ sütun rgt
adlı ve birincil anahtar id
adında olduğu, sol kolon lft
adlı, tree
adlı varsayalım. Bu değerleri ihtiyaçlarınıza göre değiştirin. Ayrıca, ilk seçim ifadesini inceleyin. Görüyorsunuz ki, düğümün 5. soyundan gelenleri araştırıyorum. İstediğiniz düğümün çocuklarını aramak için 5 sayısını değiştirin.
Kişisel olarak bunun, şimdiye kadar sunulan diğerlerinden daha şık, daha seksi ve daha verimli bir sorgu olduğunu düşünüyorum.
SELECT `lft`, `rgt` INTO @parent_left, @parent_right FROM efm_files WHERE `id` = 5;
SELECT `child`.`id`
FROM `tree` AS `child`
LEFT JOIN `tree` AS `ancestor` ON
`ancestor`.`lft` BETWEEN @parent_left+1 AND @parent_right-1 AND
`child`.`lft` BETWEEN `ancestor`.`lft`+1 AND `ancestor`.`rgt`-1
WHERE
`child`.`lft` BETWEEN @parent_left+1 AND @parent_right-1 AND
`ancestor`.`id` IS NULL
"... Ben ... bitişiklik listeleri ile iç içe set kombine" Ha! Ben de öyle yapıyorum. Ben bir katılıyorum Joe Celko tarafından yapılan bir sorguya göre liste görünümü. Çok fazla kod gibi görünüyor. Bağlantılı makalenin çözümü bile ... verbose. – Metaphile
Yani, bir düğümün torunlarını seçerek karşılaştırın: SELECT * FROM düğümleri WHERE nodes.leftBound parentLeftBound VE parentRightBound ARASINDA; – Metaphile
Eh, "child_view" oldukça basit, SELECT * FROM düğümleri WHERE parent_id = 123456: D –