Rezultate 1 la 6 din 6

Subiect: proiectare baza date pt adaugare de prieteni

  1. #1
    Avatarul lui Popescu Marian
    Popescu Marian este deconectat Ambasador
    Reputatie:
    48
    Data înscrierii
    18th April 2007
    Locaţie
    Bucuresti
    Vârstă
    45
    Posturi
    983
    Putere Rep
    48


    Implicit proiectare baza date pt adaugare de prieteni

    Salut, doresc sa creez un script php in care fiecare membru poate sa adauge 5 prieteni dintre membri deja existenti.
    Eu am facut ceva de genul:
    tabela useri: | id | prieteni | s.a.m.d.

    iar in coloana "prieteni" am trecut id-urile userilor adaugati ca prieteni sub forma 1|2|4|6|8| numai ca problema este ca nu este eficient mai ales daca doresc sa aflu care user are cei mai multi prieteni + ca trebuie sa fac explode si apoi count ca sa nu adauge mai mult de 5 prieteni + alte probleme daca doresc sa adaug mai multe functii.
    Stiti cum as putea sa proiectez ca sa fie mai eficient?

  2. #2
    Avatarul lui Ciprian.Olaru
    Ciprian.Olaru este deconectat Membru SeoPedia
    Reputatie:
    0
    Data înscrierii
    6th August 2007
    Locaţie
    Bucuresti
    Posturi
    573
    Putere Rep
    0


    Implicit

    daca relatia este bidirectionala (daca a e prieten cu b => si b e prieten cu a) ai putea incerca o tabela cu doua coloane: id1, id2 in care sa adaugi cate un rand pentru fiecare legatura dintre useri;

    pe termen lung este mult mai eficienta metoda de stocare pe mai multe randuri decat cea de stocare cu un string in care idurile sunt concatenate;

    metoda ar putea merge si daca relatia de prietenie nu e bidirectionala (atunci ar trebui sa conteze ordinea in care adaugi useri in cele doua campuri: pentru a spune ca a e prieten cu b si ca b e prieten cu a ar trebui doua randuri - a, b si b, a)

    numarul de prieteni se afla cu un count (se numara in cate randuri apare un id si ala e nr de relatii in care e implicat)
    Ultima modificare făcută de Ciprian.Olaru; 7th June 2010 la 23:29.

  3. #3
    Avatarul lui Daniel
    Daniel este deconectat Membru SeoPedia
    Reputatie:
    37
    Data înscrierii
    21st May 2008
    Locaţie
    Bucuresti(pt moment)
    Posturi
    493
    Putere Rep
    37


    Implicit

    tabela useri:
    -id_user
    ....

    tabela legaturi:
    -id_legatura
    -id_userA
    -id_userB
    -tip_legatura {1,2,3} 1=B e prietenul lui A, 2=invers, 3= A<=>B

    simplu si elegant, poti urmari prietenii userului A cu "select id_userB from legaturi where tip_legatura in (1,3) and id_userA=XXX limit 0,5"
    sau cine-l are pe A ca prieten cu "... tip_legatura in (2,3)..."
    intelegi tu.

  4. #4
    Avatarul lui Ciprian.Olaru
    Ciprian.Olaru este deconectat Membru SeoPedia
    Reputatie:
    0
    Data înscrierii
    6th August 2007
    Locaţie
    Bucuresti
    Posturi
    573
    Putere Rep
    0


    Implicit

    si daca ai urmatoarea configuratie:

    id, a, b, tip
    -, 1, 2, 1
    -, 1, 3, 2
    -, 4, 1, 3

    cum arata selectul pentru pritenii lui 1?


    Citat Postat în original de Daniel Vezi Post
    tabela useri:
    -id_user
    ....

    tabela legaturi:
    -id_legatura
    -id_userA
    -id_userB
    -tip_legatura {1,2,3} 1=B e prietenul lui A, 2=invers, 3= A<=>B

    simplu si elegant, poti urmari prietenii userului A cu "select id_userB from legaturi where tip_legatura in (1,3) and id_userA=XXX limit 0,5"
    sau cine-l are pe A ca prieten cu "... tip_legatura in (2,3)..."
    intelegi tu.

  5. #5
    Avatarul lui Daniel
    Daniel este deconectat Membru SeoPedia
    Reputatie:
    37
    Data înscrierii
    21st May 2008
    Locaţie
    Bucuresti(pt moment)
    Posturi
    493
    Putere Rep
    37


    Implicit

    ai dreptate, Gabriel, mi-a scapat ceva.:-D
    se poate renunta cu totul la tip_legatura, si atunci aveam cate o inregistrare in baza pentru fiecare relatie de prietenie (a cu B si B cu A sunt 2 inregistrari, iar selectul e simplu)

    sau
    trebuie renuntat la tipul de legatura 2

    daca A e prieten cu B, tipul e 1 - _ idA idB 1
    daca B e prieten cu A, tipul e tot 1 - _ idB idA 1
    daca A e cu B si B cu A tipul e 3 - _idB idA 3 (sau _idA idB 3)
    Ultima modificare făcută de Daniel; 8th June 2010 la 00:01.

  6. #6
    Avatarul lui resahc
    resahc este deconectat Membru SeoPedia
    Reputatie:
    36
    Data înscrierii
    9th February 2007
    Locaţie
    Iasi
    Posturi
    149
    Putere Rep
    36


    Implicit

    eu am facut o chestie de genu pentru un site si functioneaza impecabil pe destul de multe inregistrari cu multe tipuri de interogari.

    tabela useri : id, .....
    tabela relatii : id, id_user,id_friend,status
    (folosesc campul status pentru a marca o prietenie "confirmata" sau nu) initial cand iti "cer prietenia" se insereaza cu id_user=id-ul meu, id_friend=id_ul tau si status=0 iar tu poti accepta sau nu si de asemenea daca ma vrei si tu in lista ta de prieteni (gen YM) si atunci se face status=1 si se mai insereaza o inregistrare cu id-urile inversate.
    Daca iti faci si indecsi pe o astfel de tabela o poti folosi pana la adanci batraneti.

Informații subiect

Utilizatori care navighează în acest subiect

Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)

Thread-uri Similare

  1. Baza de date clienti - PC
    De Dragos Nicu în forumul Bar, lobby...
    Răspunsuri: 6
    Ultimul Post: 6th February 2010, 13:19
  2. Link din baza de date
    De Federals în forumul Server side
    Răspunsuri: 15
    Ultimul Post: 28th June 2009, 20:58
  3. Integrare baza de date.
    De superbus în forumul Servicii web / Jobs
    Răspunsuri: 4
    Ultimul Post: 14th October 2008, 21:27
  4. Baza de date :)
    De Sebastian în forumul Bar, lobby...
    Răspunsuri: 3
    Ultimul Post: 9th September 2008, 23:05
  5. Baza de date
    De eRwin în forumul Server side
    Răspunsuri: 5
    Ultimul Post: 26th August 2005, 09:10

Permisiuni postare

  • Nu puteţi posta subiecte noi.
  • Nu puteţi răspunde la subiecte
  • Nu puteţi adăuga ataşamente
  • Nu puteţi modifica posturile proprii
  •