Vyhledání přátel přes cizí klíč

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

Dobrý den machři přes Nette,
mám problém, nad kterým jsem se zaseknul. V inno databázích nejsem moc zběhlý a když do toho přidám Nette, ve kterém začínám, tak jsem v koncích. Dělám systém, ve kterém budu uchovávat data o uživatelích. Mimo jména, příjmení, hesla etc… potřebuji uchovávat data o tom, kdo se s kým zná. Není třeba ale potvrzovat vztah (tedy jde o něco jako o sledování) neboli Karel zná Michala, ale Michal nemusí mít zadáno, že zná Karla.

Mám navrženou databázi, ve které mám tabulku se seznamem uživatelů. Unikátní je nick uživatele. Pak mám druhou tabulku nazvanou známosti. Jsou zde 2 sloupce oba jsou cizí klíče na záznamy z tabulky uživatelů. V prvním sloupci se nachází údaje o právě přihlášeném uživateli a v druhém informace o tom, koho sleduje.

Pro přehlednost:

Jsem přihlášen jako Karel

V tabulce známosti je následující:

Karel, Petr
Karel, Josef
Josef, Petr
Karel, Adam

Poté přidám do tabulky, že znám Romana.

Karel, Petr
Karel, Josef
Josef, Petr
Karel, Adam
Karel, Roman

No a potřebuji vybrat, koho všeho já jako Karel sleduji.

Po mém dotazu bych tedy potřeboval dostat pole „Nicků“:

Petr, Josef, Adam, Roman

Potřebuji to proto, abych si nemohl stejný záznam do tabulky uložit znovu.

Děkuji mnohokráte za odpovědi.

Šaman
Člen | 2666
+
+3
-

Polki napsal(a): „Potřebuji to proto, abych si nemohl stejný záznam do tabulky uložit znovu.“

Tohle se řeší nastavením unikátního klíče přes oba sloupce. Databáze si pak sama pohlídá, aby se nevložil druhý stejný záznam.

A na ten výpis snad stačí obyčejný select s podmínkou, že první sloupec obsahuje Karla, nebo v čem je problém? Resp. spíš, než Karla, tak jeho ID. Tu vazební tabulku je lepší udělat jako tabulku IDček.

Polki
Člen | 553
+
0
-

Na výpis potřebuji dostat z databáze řádky z tabulky uzivatele Tedy ne jen jména lidí, které sleduji, ale i údaje o nich. Dále když chci přidat nového sledovaného, tak je vyhledávám podle jména, příjmení, emailu, nebo nicku a v zobrazených nechci aby byli lidé, které už sleduji, popřípadě abych nemohl znovu kliknout na tlačítko sledovat. Tedy filtrovat to podle těch už sledovaných.
Když tu tabulku udělám pouze jako tabulku IDček, tak budu muset poté zase vyhledávat v tabulce uzivatele každého uživatele, kterého jsem našel v tabulce pro sledování. Já jen nevím, jak z výsledků, které mi předá tabulka pro sledování dostat údaje o uživatelích, které sleduju.

Šaman
Člen | 2666
+
0
-

To jsou ale naprosté základy práce s databází. Ty potřebuješ joinování. Jasně, že dostaneš kolekci uživatelů, i když máš v tabulce jen IDčka. Konkrétní implementace záleží na tom, jakou databázovou vrstvu používáš – předpokládám, že Nette\Database. Pak je práce s tou tvojí spojovací tabulkou stejná, jako v dokumentaci práce s tagy.

Editoval Šaman (30. 8. 2015 13:33)