SQL 2 benzer tablolar Birleştirme

3 Cevap php

I have two tables which are used to store details of different types of events. The tables are almost identical, with fields such as date, duration etc. I'm trying to perform a join on the two tables and sort them by the mutual field 'date'.

Ben sadece tek bir tablo için bir 'tip' alanını eklemeniz ve tek yerde depolamak, ne yazık ki ben kullanıyorum cms doğası buna izin vermez daha kolay olacağını biliyorum.

Sadece bu gerçekleştirmek için bir yolu var mı? Aşağıdaki sorgu sonucu döndürür.

$sql = "SELECT * FROM Events_One a, Events_Two b WHERE a.Date > now() OR b.Date > now() ORDER BY Date ASC LIMIT ".$limit;

3 Cevap

Sen UNION deyimi bakmak gerekir. Bu tam olarak ne ihtiyacınız yok.

SELECT columns FROM t1
UNION
SELECT columns FROM t2

size daha sonra filtre ya da ne istersen göre sıralayabilir bir set verir.

Her biri için identical alanları ile her olay türü için bir tablo varsa, ben size tasarımını yeniden gözden geçirilmesi gerektiğini söylemek istiyorum. Bu normalleştirme kurallarını çiğniyor. Başka bir tabloya yeni bir olay ortaya çıkar her zaman eklemek için zorlar çünkü kötü bir tasarım bulunuyor. Varolan bir tabloya, yeni bir tür değer gibi, veri ekleyerek yeni bir etkinlik ekleyebilirsiniz daha iyi olur.

Eğer iki benzer tablo katılmak istiyorsanız Birliği veya sendika tümünü kullanabilirsiniz

Birliği: onun tüm seçili sütunları aynı datatype.Only farklı değerlerin olması gerekir birliğe kullanarak Command.When katılmak seçilir gibi.

Union All: tüm değerleri alacaktır neredeyse union.There gibi hiçbir farklı bir işlemdir.

select  * FROM Events_One a   WHERE a.Date > now() 
union 
select  * FROM Events_Two b   WHERE b.Date > now()