Gå til innhold

"Friend request system"


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 av laserlars
Lenke til kommentar

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 :p

Lenke til kommentar

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

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

[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 :p

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 av NoobiCake
Lenke til kommentar

[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 :p

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 av Jacobuzz
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...