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: kviricy
[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 8.3.2010 12:36  1095
sem kokot, samozejme jsem zapomel na jeden index a z 10 minut je najednou max 10 seekund :)
themajkl themajkl All those moments will be lost in time - like tears in rain. 8.3.2010 12:29  1094
Index nad
id, datum, cena
jest?
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 8.3.2010 12:18  1093
Mam tabullku s cca 65tis zaznamama vzdy za dany den...
struktura: identifikator_vyrobku, cena, datum (ten dany den za ktery to je)
Kterak byste pro mysql zoptimalizovali dotaz na vypocetni operaci, treba maximalni rozdil mezi cenou ve dni 'x' a ve dni 'y'?

Zkousel jsem klasicky
SELECT * FROM a JOIN a AS b ON a.ID=b.ID WHERE a.datum=x and b.datum=y a to jaksi trva neskutecne dlouho...

uvazuju i o nejakym jinym zpusobu ulozeni dat ale nic moc me teda nenapada...
bredy 1.3.2010 11:44  1092
pepakWikipedie to neřeší. Já tam řešení nenašel. To je totiž problém tří tabulek, nikoliv dvoi
FROM a,b CROSS JOIN c
je nebo neni totez co
FROM a CROSS JOIN b CROSS JOIN c.
?

Jako bych se ptal a * b * c = a * (b * c)?
Je to totéž? Ne vždy.
pepak pepak - Pepak.net 26.2.2010 20:29  1091
Bredy: Asi jak na které databázi.
Co k tomu říká Wikipedie
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 26.2.2010 19:53  1090
zvyknul jsem si, a na takových 95% věcí okolo databáze MySQL používám adminera (na ten zbytek ještě občas phpmyadmin)
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 26.2.2010 19:52  1089
stažení, info, ...Adminer
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 26.2.2010 19:45  1088
PHP triky - Adminer 2.3.0
bredy 23.2.2010 13:20  1087
pepakno zrovna MySQL se s verzi co verzí lepší.
jinak
FROM x, y LEFT JOIN z ON ..
není to samé co
FROM x CROSS JOIN Y LEFT JOIN z ON ...

Už proto, že v prvním případe v podmínce ON nemůžeš referovat sloupec z tabulky X. To můžeš až ve WHERE klauzuli.
bredy 23.2.2010 13:18  1086
Mě napadají šílenosti typu

FROM x,y LEFT JOIN a,b ON

FROM (x,y) LEFT JOIN (a,b) ON

FROM x, (y LEFT JOIN a),b ON # ps syntaxtická chyba

FROM x, LEFT JOIN (y LEFT JOIN a), b ON ...

Nezkoušel jsem, ale vyplývá to z logiky.
pepak pepak - Pepak.net 23.2.2010 13:18  1085
Bredy: Čárka by měla být totéž co CROSS JOIN. U MySQL samozřejmě těžko říct, to si z nějakých SQL standardů těžkou hlavu nedělá, ale u normálních databází to je jen jiný zápis téže operace.
bredy 23.2.2010 13:14  1084
Jak já jsem pochopil, tak čárka je proste nakombinování dvou tabulek každý s každým, kartérský součin, nevím, jak se to označuje u JOINů, protože jich je tolik, že v tom mám zmatek. Filtrace u WHERE pak je opravdu výběr těch dvojic, které mají zůstat. JOIN je úplně jiná operace, takže asi proto to MySQL striktně rozlišuje. Tedy že čárka s WHERE možná dělá to samé, ale není to samé. Z logiky věci pak opravdu vyplývá nutnost definovat prioritu mezi čárkou a JOIN. Zápis (a,b) JOIN ... pak znamená, aplikování JOIN na karterský součin a s b, zatímco a JOIN b JOIN ... znamená sloučení a s b a s nějakoud další tabulkou. Možná to má ale vliv jen na pojmenovávání polí a jejich adresace (tedy nemohu adresovat pole v tabulce, se kterou nespolupracuju).

Ale možná to je jen věc MySQL, neznám standard z hlavy a z databází jsem měl ve škole za 3.

Z hlediska optimalizace by však mezi čárkou + WHERE a JOIN neměl asi být rozdíl, dotaz by se měl vyhodnotit stejně. Ale to záleží na databázovém stroji.
etdirloth EtDirloth 22.2.2010 22:48  1083
Bredy [1082]: hmm, teraz si ma trochu rozhodil, pretoze odjakziva som si myslel (som bol uceny), ze ciarkami oddelene referencie iba pridaju zoznam tabuliek, ktory sa nakoniec CROSS-JOINne a vo WHERE klauzule uz len vyberies riadky, ktore maju vo vysledku zostat. Ked som vsak pre svoju interpretaciu zacal hladat podklady (par hodin som stravil nad specifikaciou SQL92 a skusal som aj ine zdroje), tak som nepochodil, pretoze specka hovori o ciarke ako ekvivalente CROSS JOIN - podobne ako ty - a o smere vykonavania, alebo priorite JOINov/ciarok ani slovo. Ucili ma to este ked som zacinal na Oracle (pricom PgSQL je na tom rovnako) - JOIN dvoch tabuliek/referencii tak ako popisujem v 1080. Je to uz tiez nejaky cas, ale co si pamatam, tak MSSQL to vyzaduje takisto v spravnom poradi.

Par rokov dozadu som vsak riesil rovnaky problem ako ty (dostal som zmigrovat jednu aplikaciu medzi MySQL4->5), kde presne takyto prehodeny JOIN/ON na MySQL4 fungoval, ale na MySQL5 uz nie. Vychadza mi to proste tak, ze niekde v standarde to je uvedene - pretoze vsetci to tak implementuju - iba ja to tam neviem najst :P
bredy 21.2.2010 18:42  1082
EtDirlothJá znám tu interpretaci. Ale už jsem zvyklý, že chci-li opravdu 1:1 spojení, tak používám FROM s čárkou a podmínku WHERE, přestože JOIN je vlastně totéž (a s JOIN to taky funguje.)

Mě šlo spíš o to, že zřejmě nově mohu přes čárku a podmínku WHERE spojit dvě tabulky, které byly předtím spojené přes JOIN, ale také mohu vzít nejprve spojení přes čárku a následně aplikovat JOIN na výsledek. Ve starém MySQL bylo možné jen to druhé, proto FROM x,y je ekvalentní FROM (x,y). Nově to tedy zřejmě ekvivalentní není.

Vem A, zleva připoj B a k tomu vem C zleva spojenou s D, 
FROM A LEFT JOIN B ON ..., C LEFT JOIN D ON...

Vem A a spoj to s C ke které nejprve zleva připoj B a D
FROM A,C LEFT JOIN B ON ... LEFT JOIN D ON ...

Vem A spojenou s C a k tomu zleva připoj B a D
FROM (A,C) LEFT JOIN B ON ... LEFT JOIN D ON ...

Ergo je to změna priority, protože nyní má čárka nižší prioritu, než JOIN.
etdirloth EtDirloth 21.2.2010 08:46  1080
Bredy [1079]: nie priorita. JOIN ti spaja dve tabulky a ON urcuje pravidla spojenia, pricom ON nema co obsahovat podmienky netykajuce sa tohto joinu. Ine podmienky patria aj semanticky do WHERE klauzuly (je imo elegantnejsie pouzit JOIN namiesto ciarky, pretoze podmienka joinu je hned pri nom a nie az vo WHERE; a to aj v pripade ze ide o CROSS).

V tvojom pripade si chcel spajat `karta` s `cis_pojistovny`, ale dotaz obsahoval `lekar` JOIN `cis_pojistovny`.

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

(c) 2001-2011 Lopuch.cz   
Kontakt