Avatar billede netslottet_com Nybegynder
04. december 2009 - 12:52 Der er 4 kommentarer og
1 løsning

Stifinder løsning i php / mysql

Hej Experter

Vi har en hjemmeside hvor vi har nogen medlemmer nogen af de medlemmer har anbefalt os til andre ved fx. at sende dem en mail med link osv. osv.

Men nu kunne vi godt tænkes os at få lidt overblik over hvem der har anbefalede hvem.

Det vil vi gøre ved hjælp af en slags stifinder sådan at hvis man klikker på ole kommer der en liste med hvem han har anbefalt osv. osv.

ca. sådan her

+Per Jensen
-Ole Hansen
  +Villy Hansen
  -Mona Jeppesen
      +Thomas Hansen
      +Mads Hansen
  +Sandra Jeppesen
+Christoffer Thomsen
+Mille Jensen

Alle vores medlemmer ligger i vores MySql database hvor vi har en tabel der hedder "medlemmer" og der har vi 2 felter vi skal bruge i den her sammenhæng "brugernavn" og "anbefalet_af"

Men hvordan man lige laver sådan en stifinder løsning i php kan jeg ikke lige finde ud af :-S

Så jeg håber at der er nogen experter som lige ved hvordan det skal laves.

Jeg håber i forstår hvad jeg mender ellers må i jo spørge ;-)
Avatar billede public2 Nybegynder
04. december 2009 - 14:08 #1
Er det designet af en stifinder opbygning du søger?

Ellers, så vil den nuværende database model du viser, ikke overholde normalformerne. I din model vil én bruger have viden om hvem han er anbefalet af. Jeg ville nok selv vende den om og sige "denne bruger har anbefalet..." men uanset måde så skal de splittes op i en ny tabel, med referencer til hinanden.

Hvis tabellen "medlemmer" indeholdte:
id | brugernavn | anbefalet_af_id

og en tabel der hedder "anbefalet" indeholdte:
id | bruger_id | anbefalet_af_bruger_id

hvor bruger_id var id'et fra "medlemmer" og hvor "anbefalet_af_bruger_id" var id'et fra den bruger der havde anbefalet ham siden.

Så skulle du kunne sige: giv mig den bruger hvor id og bruger_id er ens og returner "anbefalet_af_id". Når du så har det, så kan du spørge: giv mig brugernavnet på brugeren hvor "anbefalet_af_id" = "id".

Okay, det blev lidt indviklet, så ved ikke om det gav nogen mening??? I hvert fald, så skal det splittes op i flere tabeller for at overholde normalformerne og for at krydsreferere mellem tabellerne i databasen. På den måde undgår du grimme fejl, f.eks. hvis én bruger sletter sig selv fra din side, så skal alle de brugere som er blevet anbefalet af ham jo helst gerne stadig fungere uden at den laver fejl eller andre grimme ting.

- Public2
Avatar billede netslottet_com Nybegynder
04. december 2009 - 15:10 #2
Hej Public2

Ja det har du da fuldstændig ret i at det kan blive et problem hvis en bruger sletter sig.

Men lade os antage at mine tabeller var opbygget på din måde.

Så har jeg bare lidt svært ved at gennemskue hvordan php kode skal opbygges for at lave sådan en slags stifinde system.

Jeg kan godt selv lave det med 2 eller 3 led men vil godt have det lavet sådan at der ingen begrænsninger er.

Jeg håber du forstår hvad jeg mender ;-)

eller som du selv siger citat "Er det designet af en stifinder opbygning du søger?" - ja
Avatar billede public2 Nybegynder
04. december 2009 - 18:02 #3
Tror måske også jeg har vrøvlet lidt, har i hvert fald lige prøvet at sætte det ind i en database og den struktur jeg fandt mest logisk at sætte sådan en krydsreference op, var således:

Medlemmer

|  id  |  brugernavn  |
|  1  |  User_1      |
|  2  |  User_2      |
|  3  |  User_3      |
|  4  |  User_4      |

Anbefalet
|  id  |  bruger_id  |  anbefalet_af_bruger_id  |
|  1  |  2          |  1                      |
|  2  |  3          |  1                      |
|  3  |  4          |  3                      |

I disse to tabeller vil "bruger_id" og "anbefalet_af_bruger_id referer til "id" i tabellen "medlemmer". Du skal jo så sørger for at når en bruger bliver oprettet og vælger hvem han er blevet anbefalet af, at sætte hans brugernavns id ind i "anbefalet_af_bruger_id" og sætte den nyeste brugers id ind i "bruger_id".

Du vil så kunne spørger på hvilken brugere der er anbefalet af hvem og med deres id'er i hånden kan du spørger på det brugernavn der er tilknyttet det id.
Det kræver muligvis nogle SQL sætninger og JOIN funktioner.

Ved ikke helt om det er forståeligt? Det du skal er jo at lave en krydsreference og hvis du sammenligner det med et forum som her, hvor man kan oprette en tråd og derefter kommentere på den, så er det lidt samme princip:

Jeg opretter en tråd, som har et id. Den tråd får så nogle kommentar, men de bliver ikke placeret i samme tabel. Derimod bliver de placeret i en kommentar tabel, men med en reference til hvilken tråd.

Altså har hver kommentar kun og kun kendskab til hvilken tråd den hører til.

Prøv evt. at kigge på denne side om JOIN, der er et eksempel der sagtens kunne transporteres over på det du ønsker:

http://www.w3schools.com/sql/sql_join.asp
Avatar billede netslottet_com Nybegynder
04. december 2009 - 23:30 #4
Hej

Det du mener er vil ca. sådan her.

$hentnavn = mysql_query("SELECT * FROM Anbefalet WHERE anbefalet_af_bruger_id ='$led1'");

while ($visnavn = mysql_fetch_array($hentnavn)) {


$hentnavn2 = mysql_query("SELECT * FROM Medlemmer WHERE id ='$visnavn[bruger_id]'");

while ($visnavn = mysql_fetch_array($hentnavn2)) {


Print "<a href=\"?led2=$visnavn2[id]\">+</a>$visnavn2[brugernavn]<br />";

}
}

Det har jeg kunne lave hele tiden ;-) problemet ligger i når folk klikker på + så skulle der kommer navnene på led 2 frem og klikker du på navnene i led 2 kommer led 3 frem osv. osv.

Det er det jeg ikke lige kan sættet mig ind i hvordan man laver ?


ca. sådan her

+Per Jensen
-Ole Hansen
  +Villy Hansen
  -Mona Jeppesen
      +Thomas Hansen
      +Mads Hansen
  +Sandra Jeppesen
+Christoffer Thomsen
+Mille Jensen
Avatar billede netslottet_com Nybegynder
12. januar 2010 - 01:44 #5
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester