nwinger Skrevet 11. mai 2011 Del Skrevet 11. mai 2011 Hei, Lurer fælt på hvordan et såkalt vennesystem fungerer. Er det noen som kan peke meg i retning av en fornuftig tutorial på dette? Nei, jeg er ikke ute etter å skape facebook på nytt, men bare nysgjerrig Lenke til kommentar
MikkelRev Skrevet 11. mai 2011 Del Skrevet 11. mai 2011 Du bruker en database med en mange-til-mange relasjon, så en person kan ha mange venner. Resten er rett frem med php. Så lær deg databasemodellering først om du ikke kan det allerede. Lenke til kommentar
nwinger Skrevet 11. mai 2011 Forfatter Del Skrevet 11. mai 2011 Du bruker en database med en mange-til-mange relasjon, så en person kan ha mange venner. Resten er rett frem med php. Så lær deg databasemodellering først om du ikke kan det allerede. Databasemodellering kan jeg forsåvidt (til en viss grad). Sliter bare litt med å se logikken i en slik applikasjon. Lenke til kommentar
eigan Skrevet 11. mai 2011 Del Skrevet 11. mai 2011 Dette er jo en metode.. Tabeller: Bruker id navn ... Venn bruker_id1 bruker_id2 bruker_id1 er venn med bruker_id2, sleng inn bruker id'er i tabellen venn så er du i boks. Lenke til kommentar
nwinger Skrevet 11. mai 2011 Forfatter Del Skrevet 11. mai 2011 Dette er jo en metode.. Tabeller: Bruker id navn ... Venn bruker_id1 bruker_id2 bruker_id1 er venn med bruker_id2, sleng inn bruker id'er i tabellen venn så er du i boks. For deretter å gjøre en spørring mot den tabellen for hver gang du åpner en side? Vil ikke det være lite effektivt, eller tenker jeg bare overflødig nå? Lenke til kommentar
eigan Skrevet 11. mai 2011 Del Skrevet 11. mai 2011 ja er ikke helt unormalt å kjøre en spørring hver gang? denne løsningen tar hvert fall liten plass. Lenke til kommentar
laserlars Skrevet 11. mai 2011 Del Skrevet 11. mai 2011 (endret) For deretter å gjøre en spørring mot den tabellen for hver gang du åpner en side? Vil ikke det være lite effektivt, eller tenker jeg bare overflødig nå? Hvis du ser nederst på siden her, så står det at det har blitt gjort 12 spørringer for å åpne DENNE siden. Så, det er ganske så normalt Det er selvfølgelig lurt å gjøre smarte spørringer og indeksere tabellene. Tar ikke like mye ressurser å gjøre en count() på antall venner eller kanskje kjøre en limit på 5-10 random venner, istedet for å liste 10 000 venner ved hver sidevisning. Hvis du forstår hvor jeg vil hen? Endret 11. mai 2011 av laserlars Lenke til kommentar
nwinger Skrevet 11. mai 2011 Forfatter Del Skrevet 11. mai 2011 Da forstår jeg litt mer Takker for forklaringer så langt. Men, fremdeles ingen som er kjent med noen korte tutorials på dette på nett? Lenke til kommentar
eigan Skrevet 11. mai 2011 Del Skrevet 11. mai 2011 Vet ikke hva du har som bakgrunn jeg? Databasen har du oppi der hvert fall Så er det jo bare å leke med sql spørringer? Antall venner SELECT count(bruker_id1) as antall FROM Venn where bruker_id1 = '<id>' Hvilke venner SELECT * FROM Venn as v LEFT JOIN Bruker as b ON v.bruker_id2 = b.id WHERE v.bruker_id1 = '<id>' Tror jeg, er litt rusten på sql Lenke til kommentar
nwinger Skrevet 11. mai 2011 Forfatter Del Skrevet 11. mai 2011 Bakgrunnen er der i form av it-studier, men det semesteret jeg hadde databaser har forsvunnet litt for meg, så er vel mer enn rusten nok selv. Derfor jeg spør Ser i grunnen for meg en mange-til-mange med tabellene bruker, venn og bruker_venn (som kobler de to sammen - kommer ikke på navnet på dette i farten, men du skjønner vel hva jeg mener). Lenke til kommentar
laserlars Skrevet 12. mai 2011 Del Skrevet 12. mai 2011 En liten løsning: Brukertabell: bruker_id, brukernavn 1, bla bla 2, bla bla 3, bla bla Vennetabell: bruker_id, venne_id 1, 3 2, 1 2, 3 3, 1 Når 2 stk blir venner kan du legge til 2 linjer, f.eks brukerid 2 ble venn med id 1, og id 1 ble venn med id2 (så holder man det enkelt). du burde også ha en egen kolonne med unik id i venne_tabell for indeksering, hvis det kommer til å bli maaange rader. select * from venne_tabell where bruker_id = <bruker id> Lenke til kommentar
NoobiCake Skrevet 12. mai 2011 Del Skrevet 12. mai 2011 (endret) [MySQL] oppsett: CREATE TABLE IF NOT EXISTS `friends` ( `id` int(11) NOT NULL auto_increment, `member_id` varchar(11) NOT NULL, `friend_id` varchar(11) NOT NULL, `date_added` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `friend_requests` ( `request_id` int(11) NOT NULL auto_increment, `by_member_id` varchar(11) NOT NULL, `to_member_id` varchar(11) NOT NULL, `date_requested` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `date_accepted` varchar(24) NOT NULL, `accepted` set('no','yes') NOT NULL, PRIMARY KEY (`request_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 Du kan bytte ut date_requested og date_added timestamp med varchar(24) hvis du har en egen date funksjon du vil bruke. sjekk forespørsler:[code]$qGetRequests = mysql_query("SELECT * FROM friend_requests WHERE to_member_id = '{$_brukerID}' AND accepted = 'no'"); // sjekker om du har forespørsler som ikke er akseptert$cGetRequests = mysql_num_rows($qGetRequests);echo 'Du har <b>'.$cGetRequests.'</b> venneforespørsler.'<br /><br />';[/code] [php] list alle forespørsler: forts. fra ovenfra...[code]while($rGetRequests = mysql_fetch_array($qGetRequests)) { $qGetMember = mysql_query("SELECT * FROM members WHERE member_id = '{$rGetRequests['by_member_id']}'"); // henter info om brukeren som har lagt deg til via "by_member_id" $rGetMember = mysql_fetch_array($qGetMember); echo $rGetMember['name'].' - <a href="?act=accept&id='.$rGetRequests['request_id'].'">Godta</a><br />';}[/code] Dette er basics for et "Friend request system", [b]NB![/b] dette er bare det som viser forespørslene.Tror dette skal fungere, har ikke testet det ut, tok alt dette rett fra hodet Håper du skjønner noe av dette [b][Edit:][/b]Jeg går ut i fra at du har en tabell [b]members[/b] med [b]name[/b] som navn på brukeren, det er bare å bytte ut med det som passer deg best. Endret 12. mai 2011 av NoobiCake Lenke til kommentar
Jacobuzz Skrevet 12. mai 2011 Del Skrevet 12. mai 2011 (endret) [MySQL] oppsett: CREATE TABLE IF NOT EXISTS `friends` ( `id` int(11) NOT NULL auto_increment, `member_id` varchar(11) NOT NULL, `friend_id` varchar(11) NOT NULL, `date_added` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `friend_requests` ( `request_id` int(11) NOT NULL auto_increment, `by_member_id` varchar(11) NOT NULL, `to_member_id` varchar(11) NOT NULL, `date_requested` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `date_accepted` varchar(24) NOT NULL, `accepted` set('no','yes') NOT NULL, PRIMARY KEY (`request_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 Du kan bytte ut date_requested og date_added timestamp med varchar(24) hvis du har en egen date funksjon du vil bruke. sjekk forespørsler:[code]$qGetRequests = mysql_query("SELECT * FROM friend_requests WHERE to_member_id = '{$_brukerID}' AND accepted = 'no'"); // sjekker om du har forespørsler som ikke er akseptert$cGetRequests = mysql_num_rows($qGetRequests);echo 'Du har <b>'.$cGetRequests.'</b> venneforespørsler.'<br /><br />';[/code] [php] list alle forespørsler: forts. fra ovenfra...[code]while($rGetRequests = mysql_fetch_array($qGetRequests)) { $qGetMember = mysql_query("SELECT * FROM members WHERE member_id = '{$rGetRequests['by_member_id']}'"); // henter info om brukeren som har lagt deg til via "by_member_id" $rGetMember = mysql_fetch_array($qGetMember); echo $rGetMember['name'].' - <a href="?act=accept&id='.$rGetRequests['request_id'].'">Godta</a><br />';}[/code] Dette er basics for et "Friend request system", [b]NB![/b] dette er bare det som viser forespørslene.Tror dette skal fungere, har ikke testet det ut, tok alt dette rett fra hodet Håper du skjønner noe av dette [b][Edit:][/b]Jeg går ut i fra at du har en tabell [b]members[/b] med [b]name[/b] som navn på brukeren, det er bare å bytte ut med det som passer deg best. Når kommer det litt an på hvordan systemet skal fungere osv, men av denne løsningen lagrer du dato for når de er blitt venner 2 steder. I tillegg har du eget felt med accepted som jeg ser litt unødvendig, siden du allerede vet om forespørselen er godtatt ved at "date_accepted" er fylt ut. mulig den var tenkt annerledes, ser den står som VARCHAR. Ved f.eks å bruke member_id og friend_id på en slik måte at den som lager forespørsel er member_id og den som skal motta er friend_id (naturlig nok) kan du unngå hele friend_requests tabellen ved å hente ut forespørsler fra andre venner med med noe ala SELECT FROM friends WHERE friend_id = {meg} AND date_accepted = NULL AND NOT 'DECLINED' Endret 12. mai 2011 av Jacobuzz Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå