Există o listă, de exemplu, a utilizatorilor stocați în tabel: users.id = 1, users.id = 2. users.id = 193
Admitem că utilizatorul poate avea prieteni - alți utilizatori, adică. id = 1 este prieten cu 2, 8, 39, 43.
Nu pot decide cum este mai bine să stocăm aceste obligațiuni?
Primul lucru care vine în minte este să creezi un tabel M-k-M, utilizatorii_și prietenii
u_id - f_id, tip
1 - 2
1-8
1 - 39
1 - 43
Dar apoi se dovedește că pentru a face o sută cu o sută revine 100 * 100 INSERTov, și numai apoi să-l actualizați - în general, o conductă, se pare.
Al doilea este de a stoca linia de prieteni în utilizatori și de a păstra lista id1.friends = (2,8,39,43).
Dar apoi, pentru a afla ce tip de utilizator dintr-o franciză trebuie să aleagă cu ajutorul LIKE, așa cum o înțeleg? Dar cum să evitați ca LIKE 12 să nu aleagă LIKE 123, să legeți delimitatorii?
Spune-mi, ca de obicei, vine pentru a rezolva această problemă.
Scuze, dacă sunt proastă.
UPD. Dragă, îmi pare rău că, fără un răspuns personal la toată lumea - dar mulțumesc tuturor, înțelegeți totul, voi acționa pe baza cartei. Mulțumesc!
Puteți face acest lucru: stocați prietenii prin împărțirea "|". Apoi, de exemplu, interogarea "SELECT * FROM users WHERE freinds LIKE '% | 123 |%'" va selecta numai cei care au un prieten cu id = 123 în prietenii lor.
Doar așa e rău că editarea și / sau eliminarea frumoase nu vor funcționa.
Îți poți imagina ce va face prietenul căutării unui server? Va muri, de fiecare dată, dacă există cel puțin câteva mii
Hmm. Ceva pe care tu, dragi, nu-i sfătuiți.
Dacă există o linie _1, 2, 3, 4, atunci FIND_IN_SET va fi grozavă.
Dar, dacă oochen ar fi de dorit să se aplice astfel de mtod.
În MySQL există un tip de date SET. Cred că este potrivit pentru o astfel de sarcină, dacă numărul de prieteni nu este mai mare de 64 de ani.
În caz contrar, cu organizarea corectă a datelor, pentru a face 100 de utilizatori 100my - acest lucru nu este 10.000 de linii, dar 5.000. Dacă în mijlocul fiecărui utilizator este prietenul celor mai mulți utilizatori rămași, atunci putem presupune că în mod implicit toți sunt prieteni și stochează informații despre non-frends.
Dacă matricea de prietenie nu este suficient de completă, adică fiecare utilizator din linkurile frends nu este mai mare de 10% din toți utilizatorii, atunci puteți încerca să folosiți algoritmi de matrice rare.
Mă întreb cât de multe modalități de a rezolva această problemă "prin fund" vor fi oferite?
În sarcina setată - prima opțiune (cu o cheie pe u_id, firește) și nimic altceva. Operațiunile de schimbare a datelor pe o astfel de masă vor avea loc instantaneu.