kendini masaya katılmak

3 Cevap php

i bir tablo var,

    new_id----old_id----created_on
    1234------5678------20100912
    5678------3456------20100808

vb

ben bu sorguyu yazdı,

$q = "select event1.new_id, event1.old_id, event1.created_on,event2.new_id, event2.old_id, event2.created_on
  FROM replaced_isbns event1
  JOIN replaced_isbns event2 
  ON event2.new_id = event1.old_id
  WHERE event1.new_id='$id'";

but i get result as 5678 - 1234, ie only one row, i want all rows...

@ Webdestroya,

it gives only one row.... i want output like this, For new_id 1234, old_id's are 5678,3456 etc

3 Cevap

left outer join denemek ve örneğin yeni kimliği ile boş yerine daha tüm satırları isterseniz

SELECT
    event1.new_id, event1.old_id, event1.created_on,
    IFNULL(event2.new_id, event1.new_id),
    IFNULL(event2.old_id, event1.old_id),
    event2.created_on
FROM replaced_isbns event1
LEFT OUTER JOIN replaced_isbns event2 
  ON event2.new_id = event1.old_id
WHERE event1.new_id='$id'

Bu size yardımcı olabilir kontrol

Neden kendine katılmak yapmak?

SELECT replaced_isbns.*
FROM replaced_isbns
WHERE new_id = '$id'
OR old_id = '$id'

Şimdi, sonuç kontrol eğer new_id = $ id, ya da eğer old_id = $ id her satır için.

Eğer SQL özyinelemeli ilişkileri sorgulamak için hiçbir yolu yoktur bu yana (iyi, tamam bir sorgu kullanarak istediğiniz sonucu elde etmek mümkün olmayacaktır, Oracle ... BY sözdizimi ve CTE CONNECT ... İLE BAŞLAYIN, ama seni sanırım ) p: 'Oracle kullanılarak değilsin.

Bir şube (belirli bir ebeveyn tüm alt kayıtlar) alma iç içe setleri ile çok kolaydır çünkü Ama diğer taraftan, bir iç içe setine bu komşuluk listesini dönüştürmek deneyebilirsiniz. Managing Hierarchical Data in MySQL bu konuyla ilgili ilginç bir makale.