Portál AbcLinuxu, 6. května 2025 14:03

Dotaz: MySQL názvy sloupců ve výsledku dotazu

15.1.2015 11:30 Terka | skóre: 13
MySQL názvy sloupců ve výsledku dotazu
Přečteno: 388×
Odpovědět | Admin
zdrojová data:
DATE	      HK      IN	MY
2015-01-15    1028    1279	1569

ráda bych dostala selectem všechny sloupce, které mají hodnotu větší než 1200, tj. IN, MY
Je toto řešitelné?
Díky!

Ř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

15.1.2015 11:37 DarkKnight | skóre: 26
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dotazy v sql jsou vzhledem k radkum, tj muzes ziskat radek, kde nektera z hodnot ma vetsi hodnotu nez 1200. Nasledne to muzes filtrovat v aplikaci (abys zjistila, o ktery sloupec jde), nebo muzes mit tri rozdilne query (jednu pro kazdy sloupec).
15.1.2015 11:46 Terka | skóre: 13
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Díky za odpověď, bohužel mi moc nepomohla:
Ráda bych to toťiž vyřešila na úrovni MySQL.
A to dynamicky, aby query nezáviselo na názvech sloupců.
Díky.
Řešení 1× (Tarmaq)
15.1.2015 11:52 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
SELECT DATE, HK AS value FROM table WHERE value>1200
UNION ALL
SELECT DATE, `IN` AS value FROM table WHERE value>1200
UNION ALL
SELECT DATE, MY AS value FROM table WHERE value>1200
Délka dotazu je daní za chybnou normalizaci databáze.

Doporučuji psát názvy sloupců malými písmeny.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
15.1.2015 12:12 Terka | skóre: 13
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Ano, návrh je špatný. 
Šlo by v mysql něco jako:

for i in (select country from country) do
select i AS value FROM table WHERE value>1200
done

Cílem je dostat jednotlivé země a dál je použít v dalším query.
Tarmaq avatar 15.1.2015 12:21 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Neco podobneho by se dalo vyresit v procedure pomoci kurzoru, ale opravdu stejne jako Kit doporucuju normalizaci databaze. Jednim z benefitu by bylo zajisteni integrity dat.
Don't panic!
15.1.2015 13:42 Terka | skóre: 13
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
A jak konkrétně by to šlo?
Tarmaq avatar 15.1.2015 15:09 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
bohuzel nemam zadnou mysql db po ruce, ale melo by to jit nejak takto:
  1. Prochazet kurzorem zaznamy v tabulce countries (viz dokumentace)
  2. V kazde iteraci si splacat SQL kde bude nazev vybraneho sloupce tvoren kodem iterovane zeme
  3. Takto vytvorene sql spustit a pokud bude hodnota vetsi nez 1200, pridat ho do docasne tabulky
  4. Na konci procedury vratit obsah docasne tabulky
PS: co brani normalizaci databaze?
Don't panic!
15.1.2015 16:31 Terka | skóre: 13
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Tak mam reseni 
select column_name
  from information_schema.columns 
 where table_schema ....
   and table_name = 
   and column_name !='DATE'


>PS: co brani normalizaci databaze? 
Aplikace co funguje a je pro me mnohem jednodussi upravit kousek nez predelavat vetsi kus.
Kdyz bude cas tak treba jednou.

Diky za pomoc, ty kurzory by me zajimaly jak by to query vypadalo..
15.1.2015 16:38 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Klasická reflexe. Vypadá to dobře.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
15.1.2015 16:34 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Ono to jde i reflexí
DESCRIBE table;
a pak iterovat s vynecháním sloupce DATE. Ovšem je to hnus.

Normalizaci brání zřejmě fakt, že tu tabulku dělal někdo jiný a Terka z toho jen potřebuje vyzobat data. Už jsem před podobnou záležitost byl postaven a pokud do toho systému jiný proces sype data, tak zákazníka ke změně struktury donutíš jen stěží.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
19.1.2015 11:53 Štefan
Rozbalit Rozbalit vše Re: MySQL názvy sloupců ve výsledku dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
.. teda nevím jak tomu zadání rozuměli ostatní tady, ale já bych to viděl takto:

select * from TABULKA where IN>1200 or MY>1200;

"*" lze zaměnit za výčet potřebných sloupců

"TABULKA" zaměnit za váš název tabulky

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.