Inner join – nette DB explorer
- Newer
- Člen | 47
Nedaří se mi složit sql dotaz prostřednictvím nette db .....
mám 2 tabulky, ve zkratce
- user
user_id – primary key
email
mobile
- follower
id – primary key
user_id
parametr nabejva hodnot E jako email M jako mobile…
Tabulka follower se jeste dal filtruje podle data atp.....
můj aktuální kód
<?php
$this->database->table('follower')->select('follower.*,user.user_id')where(dalsi podminky....)->fetchPairs('message_type', 'user.mobile');
?>
teoreticky je tu chyba ze ve follower neni primary key user_id ze? Jen
user_id nemuze byt klic protoze se v tabulce muze opakovat podle data…
Jak mam nette vysvetlit at mi napoji tabulku user na follower, podle
user_id ?
v SQL by to bylo asi nejak takhle
<?php
SELECT *
FROM `follower`
INNER JOIN `user` ON `user_id` = `user_id`;
?>
jen se mi to nedari prevest do Nette, vzdy mi to vrati hlasku No reference found for $follower->user
dik moc.
- David Matějka
- Moderator | 6445
ahoj, a mas spravne definovany foreign key z follower(user_id) na user(user_id) ?
- Newer
- Člen | 47
Super, díky moc, šlape to
pro podobná jelita jako jsem já… SQL příkaz:
ALTER TABLE follower ADD FOREIGN KEY (user_id) REFERENCES user(user_id);
musel jsem vypnout kontrolu cizích klíčů. S ní to neprošlo.
Ještě mne prosím nakopni, jestli jsem to pochopil správně?
Tím příkazem jsem jsem udal do SQL info o propojení tabulek a tím selectem
Nette pouze řeknu, ať použije obě tabulky a definuju vybrané sloupce
z obou… ten left join si to poskládá samo, je to tak?
- Mistrfilda
- Člen | 76
Newer napsal(a):
Super, díky moc, šlape to
pro podobná jelita jako jsem já… SQL příkaz:
ALTER TABLE follower ADD FOREIGN KEY (user_id) REFERENCES user(user_id);
musel jsem vypnout kontrolu cizích klíčů. S ní to neprošlo.
Ještě mne prosím nakopni, jestli jsem to pochopil správně?
Tím příkazem jsem jsem udal do SQL info o propojení tabulek a tím selectem Nette pouze řeknu, ať použije obě tabulky a definuju vybrané sloupce z obou… ten left join si to poskládá samo, je to tak?
Ahoj,
ano, ten příkaz vytvořil nový cizí klíč pro tabulku follower.
kontrolu cizích klíčů si pravděpodobně musel vypnout proto, protože v tabulce follower si měl vyplněné v nějakém sloupečku user_id, které směřovalo na neexistujícího uživatele v user tabulce (v tabulce follower bylo např. user_id = 10 ale v tabulce user bylo největší ID například 5). To co jsem popsal výše je přesně důvod, k čemu je to dobré a proč je dobré to používat, bez cizího klíče (popřípadě s vypnutou kontrolou cizích klíčů) by v tabulce follower byl záznam, který by odkazoval na neexistujícího uživatele, byla by porušena integrita dat (referenční integrita https://cs.wikipedia.org/…AD_integrita).