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

Tolik rozruchu
jen v Lopuchu

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: lhmfsyf
[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
makak makak 6.8.2007 12:27  530
Hm, mne prijde hlavne trochu z cesty pouzit left join a pak vysledek omezit na nesplneny join, kdyz se to mnohem logicteji da napsat pomoci not exists. Ale samozrejme ve vysledku je to jedno a dalsi dukaz o pomerne neschopnosti optimalizace prekladacu SQL. O nutnosti pripravit vicero variant tehoz SQL pro DB2, aby se ukazalo, ktera je vyhodnejsi, bych mohl dlouho nastvane vykladat :-(
pepak pepak - Pepak.net 6.8.2007 12:07  529
Ne ze bych to cekal, ale az tak moc me to neprekvapuje - pripada mi to jako varianta na stare dobre ASC vs DESC.
bredy 6.8.2007 11:40  528
Taková perličkaAž budete optimalizovat databázi:

SELECT tb1.job_id+1 FROM `finished_jobs` AS tb1 LEFT JOIN `finished_jobs` AS tb2 ON tb2.job_id-1 = tb1.job_id WHERE ISNULL(tb2.job_id) AND tb1.job_id >= 48477 LIMIT 1;
+--------------+
| tb1.job_id+1 |
+--------------+
|        57259 | 
+--------------+
1 row in set (3 min 18.37 sec)

SELECT tb1.job_id+1 FROM `finished_jobs` AS tb1 LEFT JOIN `finished_jobs` AS tb2 ON tb2.job_id = tb1.job_id+1 WHERE ISNULL(tb2.job_id) AND tb1.job_id >= 48477 LIMIT 1;
+--------------+
| tb1.job_id+1 |
+--------------+
|        57259 | 
+--------------+
1 row in set (0.00 sec)

Povšiměte si, jak úprava podmínky v klauzuli ON - převedení jedničky na druhou stranu rovnice - má vliv na výkon.

Podotýkám, že job_id je primární klíč. V tabulce jsou uložena čísla od 48477 a výš kontinuálně, jen číslo 57259 chybí
edmundl 18.7.2007 23:04  527
Straka, to neřeš. ta db už je hotová a já nad ní stavím jen klienta bez možnosti nějak výrazně ovlivnit strukturu db.
makak: díky za nakopnutí.
straka82 Straka82 18.7.2007 22:57  526
Jo vlastne, podle toho prikladu to ma byt serazeno podle toho drivejsiho v abecede. Stejnak i stojim za resenim pomoci dvou tabulek :-)
straka82 Straka82 18.7.2007 22:54  525
Ja to asi nechapu. Co kdyz v jedne rodine bude clovek se jmenem Zavada a zaroven clovek se jmenem Absolon? Ma se tato rodina obejvit uplne na zacatku seznamu nebo uplne na konci?

Podle me by bylo lepsi to udelat pomoci dvou tabulek, v jedne by byly nejaky "oficialni" jmena tech rodin, treba Absolonovi a v druhe clenove tech rodin.
makak makak 18.7.2007 22:53  524
Prvni ORDER BY udelej pres min(prijmeni) pro danou rodinu, dalsi pak staci prijmeni a jmeno. Jak konkretne ten udaj ziskas, zalezi na konkretnich DB a pozadavcich. Napriklad subselect, inner join s group by nebo predpocitat do tabulky rodina (+ dalsi zpusoby, jak uz to u SQL je zvykem - "totez" se da napsat "ruzne").
edmundl 18.7.2007 22:18  523
Jo a samozřejmě může být v tabulce několik Petrů Nováků, patřících k různým rodinám. Tenhle případ jsem zapomněl zmínit.
edmundl 18.7.2007 22:16  522
Mám tabulku Lide, která má sloupce Prijmeni, Jmeno, Rodina. Sloupec Rodina je typu číslo. Osoby, které mají v tomto sloupci stejné číslo patří do stejné rodiny. Potřebuji udělat select, kde budou osoby seřazeny tak, aby byli rodiny u sebe,v rámci jedné rodiny byli osoby abecdne dle příjmení a jména. Až sem to umím, ale zákazník má ještě požadavek, aby pořadí rodin bylo také "abecední". Tady to zacíná být zajímavé, protože v rámci jedné rodiny mohou mít lidé různá příjmení, i když vetšinou nemají. Potřeboval bych tedy asi takovýto výstup:

Prijmeni Jmeno Rodina
--------------------------------
Absolon Adam 17
Absolon Jindra 17
Absolonova Květa 17
Horák Jan 17
Brázda Mirek 5
Brázdová Aneta 5
Smola Erik 10
Smola Marek 10
Závada Emil 3

Přemejšlel jsem nad nějakým pomocným sloupcem, nebo pomocí nějakého subselectu, ale k ničemu jsem se nedobral. Máte někdo nějaký nápad, jak to řešit?
straka82 Straka82 8.7.2007 22:03  521
Ja znam zpusoby, jak to vyresit. Jen sem se chtel proste dozvedet, jestli to nejde nejak tak, jak jsem nastinil ve svym prvnim prispevku. Dal by mi treba pomoho, kdyby existovalo neco jako '%', ale pro cisla :)
king King Born to be king - ... 8.7.2007 20:07  520
bo si v ty funkci udelej to, ze kdyz to vislo bude treba -1, nebo None ci null (jelikoz nerikas v jakym jazyku to je, predpokladam nejhorsi variantu a tedy PHP), tak tam tu limit klauzuli vubec neda...
straka82 Straka82 8.7.2007 19:37  519
Ale to slepovani se mi zda lepsi, asi to predelam :-)
straka82 Straka82 8.7.2007 19:28  518
Bo mam funkci, co mi vraci pole objektu. Ve svym programu nekdy potrebuju ziskat vsecky objekty, nekdy jen treba prvnich tricet. Udelal sem to tak, ze kdyz chci ziskat vsecky tak dam jako argument te funkci obrovsky cislo, mnohonasobne vetsi nez kdy tech objektu budu mit a hotovo...
king King Born to be king - ... 8.7.2007 17:55  517
vetsinou dulezitejsi otazka nez jestli se to da nejak udelat je jestli by se to melo delat. v tomto pripade je jasna odpoved - NE

proc bys chtel mit na konci ten limit?
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 8.7.2007 14:22  516
proste tak ze to sql slepijes a kdyz limit neni tak ho tam nedas...

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

(c) 2001-2011 Lopuch.cz   
Kontakt