Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
Avatar
Tomáš Martin Holub:4.2.2019 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.2.2019 21:15
Avatar
Ondřej Němec
Tvůrce
Avatar
Ondřej Němec:4.2.2019 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
4.2.2019 21:52
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Odpovídá na Ondřej Němec
Tomáš Martin Holub:4.2.2019 22:00

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

 
Nahoru Odpovědět
4.2.2019 22:00
Avatar
Odpovídá na Ondřej Němec
Tomáš Martin Holub:4.2.2019 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.2.2019 22:03
Avatar
Ondřej Němec
Tvůrce
Avatar
Ondřej Němec:4.2.2019 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.2.2019 22:06
Nahoru Odpovědět
4.2.2019 22:05
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Odpovídá na Ondřej Němec
Tomáš Martin Holub:4.2.2019 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.2.2019 22:15
 
Nahoru Odpovědět
4.2.2019 22:13
Avatar
Ondřej Němec
Tvůrce
Avatar
Odpovídá na Tomáš Martin Holub
Ondřej Němec:4.2.2019 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.2.2019 22:19
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Ondřej Němec
Tvůrce
Avatar
Odpovídá na Tomáš Martin Holub
Ondřej Němec:4.2.2019 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.2.2019 22:20
Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód.
Avatar
Tomáš Martin Holub:4.2.2019 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.2.2019 22:20
Avatar
Odpovídá na Ondřej Němec
Tomáš Martin Holub:5.2.2019 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.2.2019 15:48
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:5.2.2019 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.2.2019 16:11
Avatar
Odpovídá na Peter Mlich
Tomáš Martin Holub:5.2.2019 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.2.2019 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.