Portál AbcLinuxu, 10. května 2025 13:53

Dotaz: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL

Bedňa avatar 1.7.2009 10:45 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
Přečteno: 398×
Odpovědět | Admin

Dáta v databáze

kat1 kat2

kat3

ab    
ad aa  
ah af ac
ai ag aj

Potrebujem výstup

aa
ab
ac
aj

Chcem to zotriediť cez MySQL, v PHP by som to vedel, ale musel by som dať viacero dotazou do databázy, čím by sa to celé spomalilo.

Podmienka znie: Začni na prvom stĺpci s ľava ak sa názov stĺpca nezačína na "kat", tak potom vráť "nokat", ak sa názov stĺpca začína na "kat" pozri sa do stĺpca vpravo (ak sa názov začina na "kat" a je nulový vráť obsah aktuálneho stĺpca) alebo ak (sa názov stĺpca napravo nezačína na "kat" vráť hodnotu aktuálneho stĺpca) inak "čiže ak sa názov stĺpca začína na kat a je nenulový, pozri sa do ďaľšieho stĺpca či sa nezačína na kat a je nenulový prípadne sa stĺpec nezačína na kat" §toto musí bežať v slučke§ vráť hodnotu aktuálneho stĺpca, výsledok zoraď vzostupne podľa abecedy.

 

KERNEL ULTRAS video channel >>>

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.7.2009 11:17 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takýto postup sa dá "našiť" iba na konkrétnu tabuľku, ktorej štruktúru a mená stĺpcov sú dopredu známe. V relačnej databáze totiž neexistuje nič ako úplné usporiadanie stĺpcov tabuľky a vzťah "stĺpec vľavo/vpravo od" nie je definovaný.
1.7.2009 11:18 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sice jsem úplně přesně nepochopil, jaký systém se má použít, ale pokud jde o to vybírat do výsledku z různých sloupců podle jejich hodnoty, tak by měl jít použít operátor CASE.
I am always ready to learn although I do not always like to be taught. (W. Churchill)
1.7.2009 11:44 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
select COALESCE (kat3, kat2, kat1, nokat) from table order by 1;
Bedňa avatar 1.7.2009 12:10 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tá podmienka nebola úplne dobre napísaná takže úprava, ale díky za doterajšie odpovede, možno niečo s toho použijem:
Ja som to napisal symbolicky, toto potrebujem pretransormovať pre MySQL

function najdi_ posledny _kat(aktualny() {
  while ((nazov_stlpca(aktualny_stlpec +1) == $left(3,"kat")) AND (obsah_stlpca(aktualny_stlpec +1) != NULL)) {
    aktualny_stlpec++   
   }
    return (obsah_stlpca(aktualny_stlpec)
}

if (prvy_stlpec_z_lava != $left(3,"kat")) {
  vysledok = "nokat"
}
else {
  if ((nazov_stlpca(aktualny_stlpec +1) == $left(3,"kat")) AND (obsah_stlpca(aktualny_stlpec +1)==NULL)) OR (nazov_stlpca(aktualny_stlpec +1) != $left(3,"kat")) {
    vysledok = obsah_stlpca(aktualny_stlpec)
  }
  else {
    function najdi_posledny_kat(aktualny(aktualny_stlpec)
    vysledok = obsah_stlpca(aktualny_stlpec)
  }
 

KERNEL ULTRAS video channel >>>
1.7.2009 13:17 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
ak dokážete zabezpečiť, že ak kat(X) je null, tak všetky kat(X+n) sú null (aj nokat), tak sql funkcia COALESCE je to pravé ... btw, v prvom mojom príklade nokat má byť prvý, nie posledný (ako funguje, dočítate sa v manuáli). Ak je počet kat(X) dynamický, treba zmeniť štruktúru.
Bedňa avatar 1.7.2009 22:03 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL

Dík, použijem COALESCE

KERNEL ULTRAS video channel >>>
2.7.2009 09:19 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Zotriedenie viacerých stĺpcov podľa podmienky v MySQL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud můžete změnit strukturu databáze, udělejte to. Sloupce kat1…katN evidentně představují vazbu 1:N a měly by být v samostatné tabulce. Pak se vám s tím bude pracovat mnohem snáz.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.