Autor Zpráva
janhuska
Profil
dobre rano,
potreboval bych poradit s podminkami v least funkci v mysql u vyhodnoceni casů.

SELECT LEAST(cas1, cas2, ..., cas6) As minhodnota FROM stavy ORDER BY minhodnota ASC;

Cili z 6 jizd potrebuju vybrat nejlepsi cas a podle nej setridit, ale mam tam prazdne zaznamy kdy jezdec jede treba jen 3 jizdu a nebo nejede vubec a vse je prazdne .. a tim padem se mi radi na zacatek.

Moc dekuji
j.
Kajman
Profil
Je to takové neohrabané, ale snad něco jako

SELECT Least(Coalesce(cas1, cas2, cas3, cas4, cas5, cas6),
             Coalesce(cas2, cas1, cas3, cas4, cas5, cas6),
             Coalesce(cas3, cas1, cas2, cas4, cas5, cas6),
             Coalesce(cas4, cas1, cas2, cas3, cas5, cas6),
             Coalesce(cas5, cas1, cas2, cas3, cas4, cas6),
             Coalesce(cas6, cas1, cas2, cas3, cas4, cas5)) AS minhodnota
FROM   stavy
ORDER  BY minhodota IS NULL,
          minhodnota ASC

Kdyby byly casy ve své tabulce a k jednomu uživateli by bylo třeba 1- 6 řádků, tak by se dalo použít jednoduše min a s vhodnými indexy by to mělo být i rychlejší, než dělat cas1-cas6.
Joker
Profil
janhuska:
Nejde o problém v návrhu databáze „Musíte pojmenovávat sloupce s indexem“?
janhuska
Profil
Joker:
taham to ze dvou tabulek .. slo mi jen o napad jak na dotaz, tak jsem to zjednodusil.

Kajman:
dekuji, jen mi to hazi:
unknown column 'minhodnota' in 'order clause'

a netusim proc (ten preklep minhodota jsem opravil)
Kajman
Profil
janhuska:
taham to ze dvou tabulek“ ... „jen mi to haz

Takže jste dotaz nějak upravil pro více tabulek a pak to přestalo fungovat? V tom případě pošlete nově sestavený dotaz, jinak se rady nedočkáte.
janhuska
Profil
momentalne jsem na tom takhle:

$dotaz = "
SELECT jezdec.cislo As cislojezdec, 
jezdec.jmeno As jezdecjmeno, 
jezdec.prijmeni As jezdecprijmeni, 
jezdec.nick As jezdecnick, 
stavy.id As id, 
stavy.cas1 As cas1, 
stavy.cas2 As cas2, 
stavy.cas3 As cas3, 
stavy.cas4 As cas4, 
stavy.cas5 As cas5, 
stavy.cas6 As cas6,
       Least(Coalesce(stavy.cas1, stavy.cas2, stavy.cas3, stavy.cas4, stavy.cas5, stavy.cas6),
             Coalesce(stavy.cas2, stavy.cas1, stavy.cas3, stavy.cas4, stavy.cas5, stavy.cas6),
             Coalesce(stavy.cas3, stavy.cas1, stavy.cas2, stavy.cas4, stavy.cas5, stavy.cas6),
             Coalesce(stavy.cas4, stavy.cas1, stavy.cas2, stavy.cas3, stavy.cas5, stavy.cas6),
             Coalesce(stavy.cas5, stavy.cas1, stavy.cas2, stavy.cas3, stavy.cas4, stavy.cas6),
             Coalesce(stavy.cas6, stavy.cas1, stavy.cas2, stavy.cas3, stavy.cas4, stavy.cas5)) AS minhodnota 
FROM   stavy, jezdec 
WHERE jezdec.cislo=stavy.cislo AND stavy.zavod = 1 
ORDER  BY minhodnota IS NULL, 
      minhodnota ASC ";
Kajman
Profil
A jakou databázi v jaké verzi používáte?
janhuska
Profil
mysql 4.1.22 - bezi to jen na lokale pro vyhodnocovani z časomíry .. do toho bych nerad vrtal .. slouzi to jen na prubezne vystupy a tisky poradi atd.
Kajman
Profil
Zkuste

select * from (soucasny select bez order by) t order by minhodnota IS NULL, minhodnota
janhuska
Profil
tohle vyjede seznam bez toho generovaneho sloupku minhodnota

zadal jsem do vsech prazdnych poli (kdy nejeli) cas 999,999 a pak to chodi .. takze si neporadi asi jen s temi uplne prazdnymi bunkami
Kajman
Profil
janhuska:
tohle vyjede seznam bez toho generovaneho sloupku minhodnota

Pokud v tom vnitřním dotaze v závorce je vypočítání sloupce minhodnota, tak select * musí vypsat i ji.
Tori
Profil
janhuska:
takze si neporadi asi jen s temi uplne prazdnymi bunkami
Buňky, kdy jezdec nejel, musí mít hodnotu NULL. Ne číslo 0 ani prázdný řetězec. Jinak coalesce nefunguje podle očekávání.
janhuska
Profil
pokusim se tam dostat ty NULL a snad to pojede

moc dekuji za rady
J.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0