Dajú sa nejako zapísať aliasy stĺpcov

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Čamo
Člen | 798
+
0
-

Zdaravím vás,
prosím vás chcem sa spýtať

1. ako zapísať jedným joinom výber z dvoch tabuliek.
(1. vyriešené)

2. či sa dajú sa nejako zapísať aliasy stĺpcov niečo ako:
select(table1.id as id1, table2.id as id2)???

Editoval Čamo (2. 8. 2014 12:19)

David Matějka
Moderator | 6445
+
0
-

Jen upozornim, ze je to proti filozofii nette\database
viz https://doc.nette.org/…ase/explorer

Hlavní myšlenkou je načítání dat pouze z jedné tabulky a tak, aby se tyto dotazy pokládaly jen jednou.

Čamo
Člen | 798
+
0
-

matej21:
No lenže dnes som videl taký jeden dotaz, ktorý mal v klauzule in asi 30 čísel.
To sa mi moc nepozdáva.

Edit:
Ale berte to ako teoretickú otázku, lebo ten dotaz bol v rámci testu

EDIT2
Ale nesedí mi tam hlavne jedna vec. Totiž výbery z DB by mali byť podľa mňa v modely. Takto sa časť tej logiky dostáva do šablón. to by som rád eliminoval.

Editoval Čamo (2. 8. 2014 12:14)

Mysteria
Člen | 797
+
0
-

V čem se ti to nelíbí? NDBT takle prostě funguje – místo najoinování tabulek do sebe, který je většinou časově náročný udělá radši dva dotazy, kde se přeptá jenom na ty věci, který jsou potřeba z prvního dotazu.

Čamo
Člen | 798
+
0
-

Mysteria:
No ide aj o to, že časť logiky, ktorá je zodpovedná za výbery z DB je týmto pádom v šablone. Tak je to roztrieštené medzi model a šablonu.

Editoval Čamo (2. 8. 2014 12:17)

CZechBoY
Člen | 3608
+
0
-

Ono ti snad nejde ->select(‚abc AS def‘)?

Čamo
Člen | 798
+
0
-

Aha teraz som si spomenul, keď to vidím, že príkazy sa musia písať veľkým písmenom.
Takže je to vyriešené.

Editoval Čamo (2. 8. 2014 13:01)

Mysteria
Člen | 797
+
0
-

Hlavně AS je nepovinný, takže je vůbec zbytečný ho tam psát ať už malýma nebo velkýma.

Tou logikou myslíš to vytažení dodatečných informací až v šabloně? Ale to tě přece nemusí zajímat – protože nikde nemáš v šabloně napsán přece samotný select, ne? Pokud by jsi to chtěl mít opravdu jenom v modelu, tak se taky vlastně nemůžeš používat ani v šabloně related a podobný věci.

Čamo
Člen | 798
+
0
-

Mysteria:
Proste to nemám v krvi.
Prečo NDBT nemá metódu join?
Ako urobím spojenie tabuliek opačným smerom?

EDIT:
Ok tak aj opačné spojenie sa dá urobiť pomocou :table.col
Ale aj tak neviem pochopiť, prečo neexistuje metóda join.

Editoval Čamo (2. 8. 2014 14:52)

CZechBoY
Člen | 3608
+
0
-

Selectuj prostě jen to co chceš a na join kašli.
Ikdyž by to bylo stokrát lepší, protože pak máš 10 dotazů místo 1, ale tak autoři knihovny si asi myslí že to je lepší ;-)

Mysteria
Člen | 797
+
+1
-

@Čamo: Tvůj problém s NDBT vidím spíš s v tom, že ji snažíš používat stejný způsobem, jakým jsi používal připojení k databázi někde dřív. A to je prostě blbost. Sám jsem na tom byl stejně.

@CZechBoY: Na co bys potřeboval explicitně join? Stačí přidat do selectu, podmínky, řazení jinou tabulku a najoinuje se sama. Jediný co by osobně bylo fajn mít možnost si vybrat mezi LEFT a RIGHT JOIN, ale zase není problém to používat jenom z jednoho směru.

CZechBoY
Člen | 3608
+
0
-

Např. že se mi homepage generuje z 5 query místo jednoho :-(
Ale uvidim jak moc to bude brzdit až to pojede na ostro. Kdyžtak si potom dám joiny přímo do selectu. Teď to mám totiž v šabloně $content->autor->name, bla bla bla.

vvoody
Člen | 910
+
0
-

CZechBoY napsal(a):

Selectuj prostě jen to co chceš a na join kašli.
Ikdyž by to bylo stokrát lepší, protože pak máš 10 dotazů místo 1, ale tak autoři knihovny si asi myslí že to je lepší ;-)

Nenapadlo ťa že by za tým mohli byť implementačné problémy a nie len to že to proste autor nechcel? NDBT nieje „hlúpy“ skladač dotazov ako dibi, takže nieje možné nechať programátorovi úplne volnú ruku pri vytváraní dotazov.

Čamo
Člen | 798
+
0
-

Chcelo by to nejakú video prednášku o tom, ako a prečo NDBT funguje tak ako funguje a nefunguje inak. Ťažko prehĺtam veci ktorým nerozumiem a musím im iba veriť.

jannek19
Člen | 47
+
0
-

Proč tak NDBT funguje? Funguje tak proto, aby se přenášelo minimum duplicitních dat mezi aplikací a databází (k čemuž při JOINování častokrát dochází) a aby ti počet dotazů neulétl do neúnosných mezí (např. při dotazování v cyklu). Ale to je všechno v dokumentaci. NDBT původně vychází z NotORM od Jakuba Vrány, který NotORM na blogu představoval s tím, že si NotORM napsal proto, aby už nikdy nemusel napsat žádný JOIN. Spoustu info o způsobu fungování najdeš na Jakubově blogu. Sice se v současné době implementačně NDBT a NotORM asi už poměrně dost liší, ale základní myšlenky by měly pořád stejné.

Problém je v tom, že řada lidí používá NDBT na něco na co se IMHO úplně nehodí. NDBT je naprosto úžasná vrstva pro procházení dat v databázi (tolikrát v dokumentaci zmiňované autoři / překladatelé / knihy / tagy), kdy si data z tabulky a navazující záznamy můžete pomocí intuitivní a snadné syntaxe procházet a vypisovat v aplikaci křížem krážem do zblbnutí. Když potřebujete položit vlastnoruční dotaz do DB, napište si SQL a použijte NDB, ale netahejte do toho a nesnažte se přiohnout NDBT.

Mysteria
Člen | 797
+
0
-

CZechBoY napsal(a):

Např. že se mi homepage generuje z 5 query místo jednoho :-(

Takže radši uděláš 1 dotaz, který zabere plácnu 5ms místo 5 dotazů, který dohromady zaberou třeba 2ms? Jenom proto, aby jsi tam měl jeden dotaz? No nemůžu se ti divit, v začátcích jsem taky tak přemýšlel, ale rozhodně neplatí že 1 join dotaz bude rychlejší než X dotazů, které dělá NDBT. Samozřejmě určitě záleží na samotné DB, to chce otestovat :)

Editoval Mysteria (2. 8. 2014 18:58)

CZechBoY
Člen | 3608
+
0
-

No jak říkám… pokud v produkci to nebude pomalý tak mi to je jedno.

Čamo
Člen | 798
+
0
-

Neverím, že položiť dva dotazy z ktorých sa druhý musí vygenerovať cez php je porovnateľné s joinom. Fakt by to chcelo nejaké testy nech aj my lamy máme dušu namieste. Takéto veci sú pre mňa ako konvertovať na Islam. Celé roky študujem sql a spájanie tqbuliek a zrazu toto.
Rád by som si prečítal ten text kde J. Vrána píše, že už nechce písať spojenia.

Editoval Čamo (2. 8. 2014 20:58)

japlavaren
Člen | 404
+
+2
-

pripojim sa aj ja:

  • v tutorialoch je casto zle pouzivane, ze by sa mal vytvarat maly pocet dotazov. spravne by malo byt konstantny pocet dotazov
  • join cez 3 tabulky ktory musi vyrtualne spojit milion dotazov je vyrazne pomalejsi, ako niekolko malych dotazov
  • pri joine tahame pre kazdu tabulku duplicitne data (3× rovnaky nazov kategorie, 7× nazov druhej). nette database stiahne len co treba a paruje to az v php

a tu je popisana ta magia a benchmark

Čamo
Člen | 798
+
0
-

Plavaren:
Díky za tie odkazy.