Inner join – nette DB explorer

Newer
Člen | 47
+
0
-

Nedaří se mi složit sql dotaz prostřednictvím nette db .....

mám 2 tabulky, ve zkratce

  1. user

    user_id – primary key

    email

    mobile

  2. 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
+
0
-

ahoj, a mas spravne definovany foreign key z follower(user_id) na user(user_id) ?

Newer
Člen | 47
+
0
-

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?

uzziel
Člen | 46
+
-5
-

Nebo můžeš použit klasické query a neřešit foreign key.

uzziel
Člen | 46
+
-2
-

Nějaké z důvodnění daných mínusů?

Mistrfilda
Člen | 76
+
0
-

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).