Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 26. 5. 2010, 15:58:51
Zdravím všechny,
mám jeden dotaz. Mám tabulku vzájemných přátelství u uživatelů. Předpokládejme, že má následující strukturu: |ID | user_id | friend_id | status | A naplníme ji jednotlivými hodnotami |1 | 10 | 30 | 1 | |2 | 20 | 10 | 1 | Předpokládejme také, že jsem přihlášen v systému a moje uživatelské ID je 10. Pokud si dám vyhledat všechny uživatele které mám v přátelství. //BUDU PSÁT PSEUDO KÓD, DĚLÁM TO ZA POMOCÍ CAKEPHP, TAKŽE ZDE NEPOUŽÍVÁM KLASICKÝ SQL QUERY SELECT * FROM TABLE FRIENDSHIPS WHERE Friendship.user_id = MOJE.ID NEBO WHERE Friendship.friend_id = MOJE.ID A Friendship.friend_status = 2 Dostanu sadu zaznamu.. NECO ve smyslu [0] => Array ( [Friendship] => Array ( [ID] => 0 [DELETED] => 0 [user_id] => 10 [friend_id] => 31 [message] => Ahoj [date_of_send] => 2010-05-23 11:09:57 [friend_status] => 2 ) [User] => Array ( [ID] => 10 [DELETED] => 0 [nick] => [firstname] => Jiri [surname] => BLA [address_id] => 70 [password] => 7ee68fd8 [date_of_birth] => 2010-11-24 [income_id] => 1 ) ) a ja bych chtel docilit pomoci SQL dotazu toho, pokud se user_id z tabulky friendships rovna ID aktualniho prihlaseneho uzivatel, tak JOINEM propojit na tabulku users ale pres sloupec friend_id, tak abych ziskal info o uzivateli, ktereho mam za pratele a ne o me samem. Zkousel jsem nejake query dat dohromady ale jelikoz bude obsahovat zrejme slozitejsi podminku a tu ja nedokazi v Caku nasimulovat, tak jsem narazil na mrvy bod. Kdyby někdo věděl, byl bych moc vděčný a snad by to pomohlo i dalším. |
||
Joker Profil |
#2 · Zasláno: 26. 5. 2010, 16:16:31
gardener:
Kde je problém? Nevidím na tom nic složitého. Podmínka je triviální, místo aby se id z tabulky users párovalo v tabulce friendship se sloupcem user_id, bude se prostě párovat s friend_id Něco jako: SELECT sloupce FROM users u join friendship f on u.id = f.friend_id WHERE f.user_id=$id OR f.friend_id=$id |
||
gardener Profil |
#3 · Zasláno: 26. 5. 2010, 17:04:47
Ale to mi prave vrati informace i o uzivateli s ID 10, co jsem ja, tady by bylo potreba prochazet sadu zaznamu , porovnavat user_id a když to budu já, tj. user_id=10, tak načíst pro tuto iteraci údaje o uživateli podle ID ze sloupce friend_id.
Je tam tedy třeba nějaké procházení cyklem a podmínka. |
||
Joker Profil |
#4 · Zasláno: 26. 5. 2010, 17:37:46
gardener:
Aha, jasně, ID uživatele může být v jakémkoliv ze sloupců. I tak by to ale nebylo tak složité: SELECT sloupce FROM users u join friendship f on u.id = IF(f.user_id=$id, f.friend_id, f.user_id) WHERE f.user_id=$id OR f.friend_id=$id |
||
Kajman_ Profil * |
#5 · Zasláno: 26. 5. 2010, 18:54:55
Možná by bylo o fous výkonější nepsat if podmínku do joinu, ale použít union
SELECT sloupce FROM users u join friendship f on u.id = f.friend_id WHERE f.user_id=$id UNION SELECT sloupce FROM users u join friendship f on u.id = f.user_id WHERE f.friend_id=$id AND f.friend_status=2 |
||
Časová prodleva: 14 let
|
0