Autor Zpráva
Dero
Profil
Předem se omlouvám za stupidní nadpis threadu a zároveň opravdu úpěnlivě prosím o jakoukoliv pomoc.

Mějme dvě tabulky. V jedné je seznam uživatelů (id, nick, ...), ve druhé je seznam zpráv, které si uživatelé posílají (od, pro, ...).

"od" a "pro" jsou v číselném formátu, tedy jsou id uživatelů. Potřebuji seznam zpráv setřídit podle abecedy. To je snadné, pomocí JOIN.

Teď to nastane, některá "od" jsou speciální, mějme třeba 65535 pro "Systém" (pseudouživatel), který logicky není zanesen v tabulce s uživateli, takže dotaz na tabulku s uživateli vrací pro toto id nick = NULL. Potřebuji ho však také zařadit do seznamu.

Jak toho docílit jedním sql dotazem? Lze to? Možná přehlížím evidentní.

Zatím mám toto (funguje):
SELECT zpravy.*, autori.nick FROM zpravy LEFT JOIN autori ON zpravy.od = autor.id WHERE ... ORDER BY nick LIMIT ...
Kajman
Profil *
Trochu mně uniká, cože ti na tom vlastně nefunguje, tak možná budu mluvit z cesty...

Co si udělat tabulku těch speciálních id a před left join to sloučit s tabulkou autori nebo ty speciální čísla dát také do autorů a přidat tam nějaký příznak, že je to speciální číslo?

Nebo, kdyby ti vždy stačilo 'Systém', když to tam nenajde, tak bych autori.nick obalil ifem, zda to je null -- a pak bych dal order by číslo, kde to číslo je pořadí sloupečku s tímhle jménem.
Dero
Profil
Takže nová tabulka.

Jen jsem byl zvědavý, jestli to nejde řešit jinak. Samozřejmě, že těch speciálních id je více, zjednodušil jsem to, jak je to šlo.

Do tabulky k autorům to dát nemůžu kvůli komplexitě, bylo by to zbytečné testování navíc na mnoha místech.

Děkuju.
Kajman
Profil *
Aha, no ty speciální čísla proste mít někde musíš. Když to dáš do nové tabulky, tak by to snad mohlo být takhle nějak...

SELECT if(autori.nick,autori.nick,system.nick), zpravy.* FROM zpravy LEFT JOIN autori ON zpravy.od = autor.id LEFT JOIN system ON zpravy.od = system.id WHERE ... ORDER BY 1 LIMIT ...
Milda
Profil *
A ty speciální id maj taky svoje nicky? Jestli jo, tak se musej někde vzít, tj. v tabulce, nebo bys je musel všechny vyjmenovat třeba v podmínce
CASE...WHEN...THEN...END
, ale to neni moc praktický, pokud je jich víc a můžou přibývat a měnit se atd. Pokud nick nemaj a zobrazujou se s id, tak do ifu, jak radí Kajman, třeba
IFNULL(autori.nick, od.id)
...
Dero
Profil
Jj, děkuju. Vyřešeno k mé spokojenosti. Jste hodní, kluci. :o)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0