Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 13. 12. 2011, 09:04:20 · Upravil/a: Medvídek
Chci se zeptat, jak nejlépe vybrat data ze tří tabulek, který navzájem nemají stejná data kromě jediného sloupce a to datumu.
Dejme tomu nějaký log událostí: table logs ID (int) EVENT (INT) DESC (TEXT) SN (VARCHAR) SOURCE (VARCHAR) T (DATETIME) table sms out ID (int) GATE (TININT) PHONE (BIGINT) TEXT (TEXT) SEND (DATETIME) table sms in ID (int) PHONE (BIGINT) TEXT (TEXT) RECIEVE (DATETIME) A já bych potřeboval vybrat všechny záznamy ze všech třech tabulek a seřadit je dle data, ale i umě vybírat dle data a hodiny, tj podminky kdy datum bude větší než DATUM CAS atd. Jediný, co sem se tak dočetl, tak asi řešit přes Temporary Table. Neexistuje i jiné řešení? Vyhovoval by mi UNION, ale hold nemam stejné sloupce. |
||
AM_ Profil |
#2 · Zasláno: 13. 12. 2011, 13:46:05
Tak především to není šťastný návrh mít to ve třech tabulkách, s tím budeš mít vždycky jen trable, nejlepší by to bylo předělat do jedné.
To, co chceš, jde teoreticky přes pohled: CREATE VIEW smsall AS SELECT id, null AS phone, null AS messsage, T AS t FROM logs UNION ALL SELECT id, PHONE AS phone, TEXT AS message, SEND AS t FROM out UNION ALL SELECT id, PHONE AS phone, TEXT AS message, RECEIVE AS t FROM in Mít SQL tabulku/pohled/dotaz, kde bude mít každý řádek jiné typy/počet sloupců, odporuje základnímu principu relační DB. |
||
Medvídek Profil |
#3 · Zasláno: 13. 12. 2011, 13:49:53
AM
To je mi jasné, ale vládu na tabulkama nemám já, ale jiné aplikace. Šel sem nakonec cestou dočasné tabulky, což se mi zdá nejvhodnější, i ta filtrace poté bude jednoduší. |
||
AM_ Profil |
#4 · Zasláno: 13. 12. 2011, 14:16:14
no než dočasnou tabulku to raději ten pohled, ten se jako tabulka chová a nemusíš ho aktualizovat.
|
||
Medvídek Profil |
#5 · Zasláno: 13. 12. 2011, 14:22:56 · Upravil/a: Medvídek
AM:
Takže pokud sem to pochopil, tak vytvořim ten pohled (ten se dělá jen jednou?) a poté ten select už dělám přímo z toho pohledu. EDIT: Tak hotovo, moc díky za tip, neznal jsem a funguje skvěle :) |
||
Časová prodleva: 12 let
|
0