Ako napísať a prejsť tabuľky 1:N pomocou left join
- Čamo
- Člen | 798
Tak som tu zas ak dovolíte.
Snažím sa spojiť dve tabuľky vo vzťahu 1:N
Proste všetkých userov(tab.users) a všetky články(tab.posts), ktoré
napísali
Išiel som na to takto:
$this->template->users = $this->database->table('users')
->select('users.*, :posts.title as title')
->order('username ASC');
to mi vytvorí dotaz
SELECT `users`.*, `posts`.`title` `as` `title`
FROM `users`
LEFT JOIN `posts` ON `users`.`id` = `posts`.`users_id`
ORDER BY `username` ASC
To by aj šlo, ale zobrazí sa mi ladenka a že: You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server version for
the right syntax to use near 'title
FROM users
LEFT
JOIN posts
ON users
.id
=…
Problém je podľa všetkého v tom as
. Ale preto sa pýtam.
No a mohol by mi niekto predviesť ako také dáta 1:N vypíšem
v latte?
Ďakujem za odpoveď.
Editoval Čamo (9. 6. 2014 22:32)
- David Matějka
- Moderator | 6445
vsechna klicova slova (AS, DESC, ASC…) musis psat velkyma pismenkama. Vsechno ostatni je brano jako nazev sloupce/tabulky a patricne se to oescapuje
- Čamo
- Člen | 798
matej21:
Díky, funguje.
a ako prejdem tie záznamy?
Mám to takto:
<div n:foreach="$users as $user">
<h2><a n:href="Autor:show">{$user->username}</a></h2>
<span>{$user->title}</span> |
</div>
To je len surový výpis, ale robí mi to problém. Ako keby mi to robilo
niekde za chrbtom group by.
Ten príkaz by mal vypísať
Napr:
Jožko
Článok 1
Jožko
Článok 2
Fero
Ferov článok 1
Fero
Ferov článok 2
Fero
Ferov článok 3
Ale vypíše to
Jožko
Článok 2
Fero
Ferov článok 3
...
Nechápem čo robím zle.
Editoval Čamo (9. 6. 2014 22:18)
- David Matějka
- Moderator | 6445
Pokud chces vypsat seznam uzivatelu a u kazdeho uzivatele seznam jeho clanku, bude lepsi na to jit v nette/database stylu, v presenteru jen:
$this->template->users = $this->database->table('users')
->order('username ASC');
a v template:
<div n:foreach="$users as $user">
<h2><a n:href="Autor:show">{$user->username}</a></h2>
<ul>
<li n:foreach="$user->related('posts') as $post">
{$post->title}
</li>
</ul>
</div>
- David Matějka
- Moderator | 6445
proc? s tim akorat budes mit podobny problemy. Pokud na tom ale fakt trvas, melo by stacit obratit „koren“ – tedy k posts joinovat usera
- David Matějka
- Moderator | 6445
Nekdy dva jednoduche dotazy < jeden slozity dotaz.
Ale hlavnim argumentem proc to pouzivat je, ze je na tomto konceptu NDBT postaveny a predpoklada, ze se to tak bude pouzivat. A snaha joinovat pro select muze zpusobit problemy.