provázaný SQL dotaz – dvě tabulky

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

Jak položit provázaný dotaz na dvě tabulky?

API pro databázi nette jsem rozšifroval do té míry, že na jednu tabulku umím položit jakýkoli dotaz, ale napřiklad, jak napsat toto?

SELECT comp.name, tracker.time FROM comp, tracker WHERE comp.id = tracker.comp;

děkuji moc předem všem

Tharos
Člen | 1030
+
+1
-

Když jsem s ní naposledy pracoval, tak package Nette\Database\Table takovýto dotaz položit neuměla.

Pokud se něco nezměnilo, budeš si muset vystačit s Nette\Database, kde ten dotaz můžeš použít v Connection::query.

CZechBoY
Člen | 3608
+
0
-

Muzes zkusit joinWhere, neni asi zqtim dokumentovanej tak te odkazu aspon na test, snad z nej neco pochopis.
https://github.com/…ndition.phpt

kolaloka
Člen | 69
+
0
-

No, kluci, moc děkuju za nápovědu, ale vždyť na nette běžej velký projekty, jak to ti lidé dělají? Vždyť to, co jsem napsal je úplně základní funkce. Používaj dibi? Jak se to dělá v dibi?
Díky

JardaS
Člen | 1
+
0
-

Pro „velké“ projekty používám zásdaně dibi.
Je to jednak proto, že jsem primárně databázista a vyhovuje mi sestavit SQL příkaz tak jak potřebuji
a jednak zasávám názor, že co může udělat databáze má udělat a nemá se to tahat na klienta.
Takže používám nejen tabulky, ale i pohledy, uložené procedury a funkce, triggery, události apod,
což již dnes nabízí prakticky každá DB včetně MySQL. To všechno se dá z pohodlně dibi obsloužit.
Docela mě mrzí, že dnes se oblast DB a SQL dost podceňuje a spousta lidí si myslí, že ji nemusí ovládat a zachrání je nějaké ORM. U rozsáhlé aplikace se stovkami tabulek, složitými procesy a rozsáhlými výběry dat si to dost dobře neumím představit.

SELECT comp.name, tracker.time
FROM comp
JOIN tracker ON tracker.comp = comp.id;

CZechBoY
Člen | 3608
+
0
-

No a ten joinWhere ti nejde?

kolaloka
Člen | 69
+
0
-

@CZechBoY no, já jsem si to furt dokola zkoušel, ale asi to nedokážu celkově zapsat, neumím z toho asi vyplivnout výstup, nejspíš mám špatně syntax, nebo jsem to nepochopil z toho příkladu správně. Pastnu to sem odpo, jestli se mi na to podíváš, budu rád.

kolaloka
Člen | 69
+
0
-

@JardaS Díky moc za návod. Ještě se musím podívat, jak se vůbec ta dibi zapíná a jak se z ní dostává výstup ven. Ono, když člověk poprvé pracuje s takovýmhle frameworkem, tak věci, které jsou uživatelům implicitně jasné jsou nám, novomamlasům zcela neznámé. :-D

kolaloka
Člen | 69
+
0
-

Už jsem to pochopil.
Jakýkoli dotaz musím položit v presenteru pomocí:

<?php
$this->template->firstMonth = $this->database->query('SELECT * FROM track WHERE .....');
?>

a pak ho vyčíst v latte např. takhle prakticky do tabulky:

<?php
    {foreach $firstMonth as $prace}
    <table>
    <tr><td><a n:href="Track:show $prace->id">{$prace->comp}</a></td>
    <td>{$prace->date}</td>
    <td>{$prace->sub}</td>
		.
		.
    </tr></table>
?>

vypisuju pro podobné zoufalce, jako jsem já, až to budou číst

Editoval kolaloka (6. 12. 2016 16:35)