Výběr z tabulky na základě více cizích klíčů na stejnou tabulku

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

Mám tabulku Knihy a tabulku Uživatele. V tabulce Uživatele uchovávám id, Jméno a Příjmení. V tabulce Knihy uchovávám id, název_knihy, vypůjčil_si, propůjčuje.

Tedy mám několik uživatelů, každý může dát k vypůjčení libovolné množství svých knih a také si může půjčit libovolné množství knih od jiných uživatelů. V tabulce Knihy jsou sloupce vypůjčil_si a propůjčuje cizí klíče na položku id v tabulce Uživatele.

Dotaz zní: Jak vybrat všechny knihy, které si daný uživatel vypůjčil a jak vybrat všechny knihy, které daný uživatel propůjčuje? Tedy jak zajistit, aby Nette vědělo, podle kterého z cizích klíčů do tabulky Uživatele má vybírat?

Díky za odpovědi. :)

vvoody
Člen | 910
+
0
-

Pokúšal si sa o to pred tým než si napísal tento dotaz?

$context->table('Knihy')->where('vypůjčil_si', $userId);
$context->table('Knihy')->where('propůjčuje', $userId);

Editoval vvoody (22. 6. 2015 12:59)

Polki
Člen | 553
+
0
-

Abych pravdu řekl tak ne. Studoval jsem tuhle stránku "":https://doc.nette.org/…ase/explorer
Tam je nějaký návod, jak to provézt, jenže z tohoto zápisu:

$selection = $context->table(‚book‘);
$selection->where(‚author.name LIKE ?‘, ‚%Jon%‘);
$selection->where(‚translator.name‘, ‚David Grudl‘);

Nejsem moc moudrý, jelikož podle toho, jak jsem to pochopil, tak author.name je odkaz na tabulku author ne? nebo je to sloupec author a v něm je celý řádek o autorovi z tabulky authors? Nebo jak tomu mám rozumět? Pokud je to odkaz na řádek o autorovi, neměl bych to potom vybrat stylem $context->table(‚Knihy‘)->where(‚propůjčuje.id‘, $userId); ? podle toho, co jsi mi poradil chápu jen, že je v tom daném sloupci uložena hodnota primárního klíče, na který se odkazuji. Nejspíš ty InnoDB moc nechápu. Nicméně děkuji za tip a jdu jej zkusit.

David Matějka
Moderator | 6445
+
0
-

A cetl is i ten odstavec nad tim?

Řekněme, že chceme vybrat všechny knihy, které napsal autor jménem „Jon“. Musíme napsat pouze jméno „spojovacího klíče“ relace a název sloupce spojené tabulky. „Spojovací klíč“ je odvozen od jména sloupce, který odkazuje na tabulku, se kterou se chceme spojit. V našem příkladu (viz databázové schéma) je to sloupec author_id, ze kterého stačí použít část – author. name je název sloupce v tabulce author. Můžeme vytvořit podmínku také pro překladatele knihy, který je připojen sloupcem translator_id.

Polki
Člen | 553
+
0
-

Přečetl jsem si to asi 20×, ale až teď jsem to pochopil :D Díky hoši.