Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Diskuze na Lopuchu,
pohlazení na duchu

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub Database (mysql,...) [ŽP: neomezená] (kategorie Programování) moderuje melkor_unlimited.
Archiv
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: uoxjevb
[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
straka82 Straka82 30.10.2009 11:50  1013
A jde to i bez toho, aniz bych mel v tabulce sloupec s poradim? Pokazde chci radit podle neceho jinyho.
king King Born to be king - ... 30.10.2009 02:58  1012
SELECT * FROM hodnoceni WHERE ABS((SELECT poradi FROM hodnoceni WHERE name = 'Petr') - poradi) < 5
pepak pepak - Pepak.net 27.10.2009 19:19  1011
Pokud vím, tak žádným.
straka82 Straka82 27.10.2009 19:05  1010
Ok, diky za rady. Zda se ze tomu rozumite, proto mam dalsi dotaz. Dejme tomu, ze mam nejakou tabulku s bodovani, kde je treba zase Petr :D nekdy osmy, nekdy dvacaty atd. Jakym dotazem vyberu radek s nim a se ctyrma lidma nad nim a se ctyrma lidma pod nim?
huh huh 27.10.2009 14:09  1009
V MySQL by mělo být nejjednodušší TRUNCATE(body_dosud, -2)
pepak pepak - Pepak.net 27.10.2009 13:35  1008
Já bych to dělal jako

SELECT CAST(body_dosud/100 AS INTEGER)*100, MIN(datum)
FROM body
WHERE jmeno='Petr'
GROUP BY 1

(resp. dalo by se to groupovat ještě podle jména.)
Samozřejmě přepsané na to, jaké funkce umí MySQL - nevím, jestli umí CAST, nebo jestli třeba nemá nějaké jednodušší oříznutí na celé stovky...
straka82 Straka82 27.10.2009 09:49  1007
Jej, sorry, to kdy ziska Petr paty bod je samozrejme pohoda, ja ale potrebuju dotaz, ktery mi vrati vsechna petrova jubilea - tedy kdy ziskal kazdy sty bod. Jak jsem popisoval podrobne v 998. Vyresil jsem to tema unionama.

pepak pepak - Pepak.net 27.10.2009 09:06  1006
Když to doplníš o ten nasčítávací sloupeček (to byl právě důvod, proč jsem chtěl ty triggery), tak je to mnohem jednodušší. S informací, že jméno a součet jsou parametry zvenku a tobě stačí odpovídající datum, je to naprostá trivialita:

SELECT MIN(datum) FROM body WHERE jmeno='Petr' AND body_dosud>=5
straka82 Straka82 27.10.2009 08:53  1005
Ok, zkusim to tedy vysvetlit obsirneji.
Dejme tomu, ze existuje nejaka soutez, kdy se denne pripisuje hracum ruzny pocet bodu. To je vyjadreno v tabulce jmenem "body". Protoze chci jednodusse zjistovat, kdy kdo dosahl jubilnejniho (treba steho, dvousteho atd) bodu, dal jsem do tabulky navic sloupec, kde se postupne body nascitavaji (to sem resil prave v tom 591). Priklad tabulky "body":

datum|jmeno|body|body_dosud
-------------------------------------------
2009-09-07|Martin|2|7
2009-09-07|Petr|1|8
2009-09-05|Martin|2|5
2009-09-05|Petr|4|7
2009-09-03|Martin|1|3
2009-09-03|Petr|3|3
2009-09-01|Martin|2|2
2009-09-01|Petr|0|0
Doufam ze jsem tam neudelal chybu v poctech. No a moje otazka tedy zni, jakym dotazem zjistim, kdy ziskal treba petr jubilejni paty bod. Ten Petr a petka by mohly byt promenne.
Uz jsem to vyresil tema unionama, mozna existuje lepsi zpusob. S triggerama nemam bohuzel zkusenosti, ale jejich nauceni bych se asi nebranil, pokud by tohle byl typicky priklad, na co se daji pouzit :)
Pouzivam mysql, tu databazi si spravuju sam, takze muzu delat snad cokoli, treba i menit tu definici tabulek. Ale do toho bych se poustel narad. Diky
pepak pepak - Pepak.net 25.10.2009 06:49  1004
No 951 je dost daleko zpátky...

Kromě toho ani tam není uvedeno, pro kterou je to databázi. A to je dost podstatná informace. Stejně jako je dost podstatná informace to, nakolik to máš pod kontrolou a je možné měnit definice tabulek, protože to, co chceš, by se právě velmi dobře řešilo těmi triggery.
straka82 Straka82 24.10.2009 22:21  1003
Od prispevku 951 je vysvetleno, na co to je. Proste se nascitavaji body
pepak pepak - Pepak.net 24.10.2009 21:45  1002
No, v první řadě by stálo za to napsat, o jakou databázi se jedná.

Potom by nebylo úplně od věci napsat nějak lidsky, k jakému účelu to má tak zhruba sloužit - třeba se ukáže, že by se na to mnohem líp hodila nějaká úplně jiná struktura nebo třeba nějaký obchvat (ve stylu "použít trigger, který do vedlejší tabulky vyplní odpovídající řádky").

No a za třetí, viděl bych to nejspíš na sekvenci subselectů - nejvnitřnější vybere ty nejmenší počty (něco jako SELECT MIN(pocet) FROM tabulka GROUP BY (CAST (pocet/100 AS INTEGER)), další k nim vybere nejnižší datum atd.
knedle knedle online - Krabice živých 24.10.2009 21:29  1001
me ted nic nenapada - nejde to?

rad se priucim
straka82 Straka82 24.10.2009 18:28  1000
Zatim jsem prisel jen na neco takovyho:
(select min(datum), '100' as milnik from tabulka where jmeno = 'Petr' AND pocet >= 100 GROUP BY jmeno)UNION(select min(datum), '200' as milnik from tabulka where jmeno = 'Petr' AND pocet >= 200 GROUP BY jmeno)UNION(select min(datum), '300' as milnik from tabulka where jmeno = 'Petr' AND pocet >= 300 GROUP BY jmeno)

Napojil bych tam rozsah 100 az 2000, na vic se nikdy v tabulce stejne nedostanu, ale tohle podle me neni dobry reseni...
straka82 Straka82 24.10.2009 17:47  998
Ahoj, mam tabulku s atributy datum, jmeno a pocet, naplneou napriklad temito daty:
datum|jmeno|pocet
--------------------
2009-10-14|Petr|301
2009-10-13|Petr|301
2009-10-12|Petr|301
2009-10-12|Petr|298
2008-10-13|Petr|203
2008-10-09|Petr|202
2008-10-08|Petr|199
2008-10-06|Petr|198
2007-10-07|Petr|100
2007-10-06|Petr|98

Chtel bych nejakym dotazem (se kterym si nevim rady), vybrat jen ty radky, kde je pocet vzdycky nejnizsi cislo, ktery je vetsi nebo rovno 100, 200, 300 atd., ale vzdy jen jeden od kazdyho (ten s nejnizsim datem)

Z daneho prikadu bych tedy potreboval dostat tyto radky:

2009-10-12|Petr|301
2008-10-09|Petr|202
2007-10-07|Petr|100

Asi se tam nejak bude pouzivat funkce MOD. Snad jste me pochopili, diky za rady :)

[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt