IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Mysql-opakující se údaje

Aktivity
Avatar
pintera.jakub:1.3.2014 17:35

Ahoj, potřeboval bych poradit mam sloupeček něco_id a vedle něho mam sloupeček hodnost. Potřeboval bych aby u řádků ze stejným něco_id vybralo vždy pouze jeden a to ten s nejvyššim id.
Příklad:
něco_id hodnost poznámka
1------------1---------A
_____________­_________
1------------3---------B
_____________­_________
2------------1---------C
_____________­_________
2------------3---------D
_____________­_________
2------------2---------E
_____________­_________
1------------4.........F
_____________­_________
1------------5---------G
_____________­_________
A z této tabulky potřebuji vybrat pouze údaje s poznámkou G,D
Jde to nějak?

Editováno 1.3.2014 17:38
 
Odpovědět
1.3.2014 17:35
Avatar
Zdeněk Pavlátka:1.3.2014 17:41

Něco na způsob tohohle:

SELECT MAX(id) as hodnota FROM tabulka WHERE poznamka = 'G' OR poznamka = 'D'
Nahoru Odpovědět
1.3.2014 17:41
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:1.3.2014 17:46

Trošku zmatený dotaz, řekl bych...
Jestli to dobře chápu, použil bych SQL dotaz s použitím GROUP BY

SELECT * FROM tabulka ORDER BY hodnost DESC GROUP BY něco_id
Nahoru Odpovědět
1.3.2014 17:46
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Zdeněk Pavlátka:1.3.2014 17:48

Je to hodně zmatené.

Nahoru Odpovědět
1.3.2014 17:48
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Michal Štěpánek:1.3.2014 17:52

Myslím si, že výběr dat s poznámkou G a D byl myšlen tak, že mají v tomto případě oba nejvyšší 'hodnost' u každého 'něco_id' a ne, že by chtěl vybírat pouze tyto dva...

Nahoru Odpovědět
1.3.2014 17:52
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
pintera.jakub:1.3.2014 17:54

Děkuju vyzkouším to. Jinak ta poznámka je jen jako příklad.

 
Nahoru Odpovědět
1.3.2014 17:54
Avatar
Odpovídá na Michal Štěpánek
pintera.jakub:1.3.2014 18:17

Moc díky, ale toto hází syntax error a pokud přesunu ORDER BY za Group BY DESC tak to sice chybu nehází ale ukáže to jen jedno se stejnym id, ale s tou menší hodností a to ať dám desc asc. Nevíš pls co s tim?

 
Nahoru Odpovědět
1.3.2014 18:17
Avatar
Odpovídá na pintera.jakub
Drahomír Hanák:1.3.2014 18:30

Order by se vykoná až po seskupení. Mohlo by to vypadat třeba nějak takhle:

SELECT * FROM tabulka a WHERE hodnost = (SELECT MAX(hodnost) FROM tabulka WHERE neco_id = a.neco_id)
 
Nahoru Odpovědět
1.3.2014 18:30
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:1.3.2014 18:36

Zkusil bych tam dát uvozovky nebo apostrofy u toho řazení a groupování...
Jaký datový typy máš v tý tabulce?

Nahoru Odpovědět
1.3.2014 18:36
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Drahomír Hanák
pintera.jakub:1.3.2014 18:41

Díky moc, ale nešlo by to nějak pomocí toho GROUP BY, protože já sem tuto tabulku tady nahoře dal jen jako příklad. Potřebuji to totiž použít na výsledku, který vzniká pomocí join.

 
Nahoru Odpovědět
1.3.2014 18:41
Avatar
Odpovídá na Michal Štěpánek
pintera.jakub:1.3.2014 18:46

S tima úvozovkama to taky nejde používám tam int.

 
Nahoru Odpovědět
1.3.2014 18:46
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:1.3.2014 18:56

Kolika dat se ten select týká? Nešlo by to procházet cyklem?

Nahoru Odpovědět
1.3.2014 18:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na pintera.jakub
Drahomír Hanák:1.3.2014 18:57

Napadá mě už jenom jedna možnost. Seřadit si výsledek podle hodnosti a ten pak použít jako data pro dotaz, který je seskupí podle neco_id.

SELECT * FROM (SELECT * FROM tabulka ORDER BY hodnost DESC) a GROUP BY a.neco_id
 
Nahoru Odpovědět
1.3.2014 18:57
Avatar
Odpovídá na Drahomír Hanák
pintera.jakub:1.3.2014 19:01

Dík ale toto by se dalo podle mě použít jen v případě že bych to dělal pro jednu tabulku ke které by nebyla žádná připojená.

 
Nahoru Odpovědět
1.3.2014 19:01
Avatar
Odpovídá na Michal Štěpánek
pintera.jakub:1.3.2014 19:01

Ten select je asi na 7 tabulek

 
Nahoru Odpovědět
1.3.2014 19:01
Avatar
Odpovídá na pintera.jakub
Drahomír Hanák:1.3.2014 19:23

Ta vnořená query nemusí vybírat data z klasické tabulky. Klidně to může být nějaký spojený výsledek (seřadit ho podle hodnosti už není tak složité). V podstatě by mělo stačit jen obalit tvoji SQL query, která vygeneruje ten výsledek, co jsi ho ukázal nahoře, tím mým dotazem (dát místo vnořeného SELECTu tvůj dotaz). Neznám ale tu vnitřní strukturu ani jak dáváš dohromady tuhle složenou tabulku, takže asi víc neporadím.

 
Nahoru Odpovědět
1.3.2014 19:23
Avatar
pintera.jakub:1.3.2014 20:54

Ok díky to mě nenapadlo. Ještě se omlouvám ale nevěděl bys prosim syntaxi toho příkazu?

Potřeboval bych toto aby to fungovalo.
napadlo mě jen toto ale to má chybu v syntaxy.
_____________­________________________­________________________­______________
SELECT (SELECT * FROM tblkategorie kat LEFT JOIN tblZANR zanr ON zanr.ID_KATEGO­RIE=kat.KATEGO­RIE_ID WHERE kat.navrh IS NULL ORDER BY ID_UROVEN ASC)GROUP BY KNIHA_ID

Editováno 1.3.2014 20:56
 
Nahoru Odpovědět
1.3.2014 20:54
Avatar
Odpovídá na pintera.jakub
Michal Štěpánek:1.3.2014 22:56

Myslím, že hlavní problém v syntaxi je to SELECT(SELECT...
vnořené selecty by měly být ve tvaru např.:

SELECT něco FROM tabulka WHERE cokoliv NOT IN(SELECT...)
Nahoru Odpovědět
1.3.2014 22:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.