Vyhledání přátel přes cizí klíč
- Polki
- Člen | 553
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
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
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
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)