Vajíčková mánie Vajíčková mánie
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde

Diskuze: Jak vybrat uživatele, kteří nejsou moji přátelé?

Aktivity (1)
Avatar
Tomáš Martin Holub:4. února 21:15

Potřebuji udělat SQL příkaz, který najde pomocí tabulky friends uživatele, který není můj přítel např.
já jsem uživatel, který má ID 1 a potřebuji aby mi SQL příkaz vyhodil uživatele s ID 3 , ale uživatel s ID 3 je kamarád s ID 2 a to je kamarád ID 1

Zkusil jsem: Zkoušel jsem vymýšlet různé příkazy, ale asi jsem se nejblíže dostal pomocí tohoto příkazu

SELECT * FROM `friends` JOIN users ON users.ID = (CASE
WHEN `RequestIDTo` = 1 THEN `RequestIDFrom`
ELSE `RequestIDTo` END) WHERE `Accept` = 1 AND RequestIDFrom = 1 OR RequestIDTo = 1 AND `Accept` = 1

Ale zde jsem měl problém s tím, že když jsem našel záznam, který se netýká mě jako uživatele, např. RequestIDFrom = 2, ReuqestIDTo = 3
a já jsem byl kamarád s ID 2 tak mi příkaz vyhodil uživatele s ID 2 a 3, ale uživatel s ID 2 je můj kamarád, takže toho zobrazit nechci.

Chci docílit: Snažím se dosáhnout příkazu, který splní mé podmínky, které jsou zmíněny výše.

 
Odpovědět 4. února 21:15
Avatar
SolusLupusUmbra
Redaktor
Avatar
SolusLupusUmbra:4. února 21:52

chápu dobře, že chceš uživatele, na které nemáš přímou vazbu?

SELECT * FROM users u
LEFT JOIN friends f_to ON u.ID = f_to.RequestIDTo
LEFT JOIN friends f_from ON u.ID = f_from.RequestIDFrom
WHERE u.ID != 1
        AND f_to.RequestIDFrom != 1
        AND f_from.RequestIDTo != 1
        AND f_to.Accept = true
        AND f_from.Accept = true
GROUP BY u.ID

je to trochu neohrabané, ale mohlo by to fungovat

 
Nahoru Odpovědět  +1 4. února 21:52
Avatar
Odpovídá na SolusLupusUmbra
Tomáš Martin Holub:4. února 22:00

Chci uživatele, ke kterému nemám žádnou vazbu, ale i tak díky za snahu ;)

 
Nahoru Odpovědět 4. února 22:00
Avatar
Odpovídá na SolusLupusUmbra
Tomáš Martin Holub:4. února 22:03

Ale i to co jsi udělal se dá použít, jen nesmí být záznam můj přítel, což se mi u nějakých záznamů stalo.

 
Nahoru Odpovědět 4. února 22:03
Avatar
SolusLupusUmbra
Redaktor
Avatar
SolusLupusUmbra:4. února 22:05

takže uživatelé, které to vyplivne, nemáš být ty a tvoji přímí přátelé? přátelé jejich přátel to mohou být, nebo to mají být uživatelé, na které nemáš vůbec žádnou vazbu?

Editováno 4. února 22:06
 
Nahoru Odpovědět 4. února 22:05
Avatar
Odpovídá na SolusLupusUmbra
Tomáš Martin Holub:4. února 22:13

Uživatelé, které to vyplivne nemám být já ani moji přímí přátelé, ale přátelé jejich přátel to být mohou, nebo to mají být tedy uživatelé na které nemám vůbec žádnou vazbu. Takto :D

Editováno 4. února 22:15
 
Nahoru Odpovědět 4. února 22:13
Avatar
SolusLupusUmbra
Redaktor
Avatar
Odpovídá na Tomáš Martin Holub
SolusLupusUmbra:4. února 22:19

pokud ty jsi 1 a jsi přítel 2 a 2 je přítel 3, ale 3 není přítel 1, tak ty nemáš přímou vazbu na 3, ale nepřímou. Pokud by tu ještě bylo id 4, které není přítel s nikým, tak s ním nemáš žádnou vazbu.
tak jsem to myslel :-D

 
Nahoru Odpovědět 4. února 22:19
Avatar
SolusLupusUmbra
Redaktor
Avatar
Odpovídá na Tomáš Martin Holub
SolusLupusUmbra:4. února 22:20

pokud ty jsi 1 a jsi přítel 2 a 2 je přítel 3, ale 3 není přítel 1, tak ty nemáš přímou vazbu na 3, ale nepřímou. Pokud by tu ještě bylo id 4, které není přítel s nikým, tak s ním nemáš žádnou vazbu.
tak jsem to myslel :-D

 
Nahoru Odpovědět 4. února 22:20
Avatar
Tomáš Martin Holub:4. února 22:20

Ano, ale je možnost, že se již kamarádím s ID 3, ale když se s ním kamarádím, tak ho již nechci vypisovat, ale jinak takhle :D

 
Nahoru Odpovědět 4. února 22:20
Avatar
Odpovídá na SolusLupusUmbra
Tomáš Martin Holub:5. února 15:48

Tak dobrý, nakonec jsem ještě s pomocí stackoverflow vymyslel to co jsem potřeboval, dyžtak kód házím sem, ale i tak, díky za snahu ;)

SELECT * FROM users u WHERE
u.ID NOT IN (SELECT RequestIDTo FROM friends where RequestIDFrom=1 OR RequestIDTo = 1) AND
u.ID NOT IN (SELECT RequestIDFrom FROM friends where RequestIDFrom=1 OR RequestIDTo = 1)
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět 5. února 15:48
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:5. února 16:11

A nebylo by jednodussi pouzit tam union? Jako, pro rychlost zpracovani.

id NOT IN (
SELECT ...
UNION
SELECT ...
)

To zadani mi neni moc jasne.

 
Nahoru Odpovědět 5. února 16:11
Avatar
Odpovídá na Peter Mlich
Tomáš Martin Holub:5. února 16:18

Díky za radu, taky bych vám oboum rád nějak poděkoval, chtělo by to asi něco jako víc řešení, tady na itnetworku :)

 
Nahoru Odpovědět 5. února 16:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.