Avatar billede kasbas91 Nybegynder
03. januar 2011 - 21:51 Der er 19 kommentarer og
1 løsning

Hej da jeg er igang med et vennesystem med en ven fra min skole, jeg vil dog gerne lave en ordenlig venneliste ??

Hej eksperten.dk

Hej da jeg er igang med et vennesystem med en ven fra min skole,

jeg vil dog gerne lave en ordenlig venneliste.

Min ven fra min skole, kom med en ide til en venneliste..

Forstil jer tabellen:

friendlist: 1,2,3,4,5,9,16,80,87,65,32,18

Altså alle tallene er id'er som man er venner med..

Men hvordan kan jeg splitte dem på en ordenlig måde.

Og at komma'erne altid bliver sat rigtigt, så den ikke lige

pludselig starter med ,2,4,5,9

Eller hvordan syntes i at vi skal lave vores venneliste. ? ;P

Har aldrig prøvet at lave sådan en før, så kunne godt bruge

nogle ideér ;P Tak...
Avatar billede cyberman29 Nybegynder
03. januar 2011 - 22:07 #1
Du kan vel bare lave id som primary key, og smide auto_increment på?
Avatar billede kasbas91 Nybegynder
03. januar 2011 - 22:16 #2
hmm du forstå ikke helt..

Det jeg mener og det her er bedst:

CREATE TABLE IF NOT EXISTS `friends` (
  `friend_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `friend_option` int(11) NOT NULL,
  `friend_date` datetime NOT NULL,
  `friend_list` varchar(255) NOT NULL,
  KEY `friend_id` (`friend_id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Data dump for tabellen `friends`
--

INSERT INTO `friends` (`friend_id`, `user_id`, `friend_option`, `friend_date`, `friend_list`) VALUES
(1235654, 1234234, 1, '2011-01-03 22:10:46', '1,2,3,4,9,10,15,79,65,45,32,12,35,78,98,4586');

Se her: 1,2,3,4,9,10,15,79,65,45,32,12,35,78,98,4586 er id'er.

Hvis du forstår..

Det har ikke noget med primary eller auto inc.

Det handler om hvilken måde der er bedst, og hvordan man gør det.

Hvordan man sortere komma'erne fra og fordeler id'erne rigtig ud.
Avatar billede Claus Mattsson Nybegynder
03. januar 2011 - 22:29 #3
Mon ikke der er tale om et fejl design...?? Hvad med at flytte relationen mellem venner ud i en tabel for sig. Således at friend_id -> friend_id?? På den måde kan du lave en mange til mange relation og løbe tabellen igennem.

Om du så efterfølgende ønsker at sortere friend_id'erne stigende, faldende eller random er helt op til dig selv og uafhængigt af db designet...

//CyberOpz
Avatar billede kasbas91 Nybegynder
03. januar 2011 - 22:31 #4
Hej cyberopz..

Jeg forstod ikke helt det du skrev.. Hvad mente du med fejl design.

Er der noget galt med min tabel friends. ;P
Avatar billede kasbas91 Nybegynder
03. januar 2011 - 22:33 #5
Men hvordan kan en tabellerne i et venne system så se ud, så

det bliver lavet rigtigt.. ;P
Avatar billede Claus Mattsson Nybegynder
03. januar 2011 - 22:39 #6
Ja mener der er fejl i designet. Ville bruge to tabeller i stedet:

CREATE TABLE IF NOT EXISTS `friends` (
  `friend_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `friend_option` int(11) NOT NULL,
  `friend_date` datetime NOT NULL,
  KEY `friend_id` (`friend_id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `friend_list` (
  `friend_id` int(11) NOT NULL,
  `myfriend_id` int(11) NOT NULL,
  KEY `friend_id` (`friend_id`),
  KEY `myfriend_id` (`myfriend_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Så løbe igennem for om id er i den ene eller den anden side og matche det op via pgm eller db join...

//CyberOpz
Avatar billede kasbas91 Nybegynder
03. januar 2011 - 22:41 #7
Okay, hvad vil du bruge `myfriend_id` int(11) NOT NULL til.. ;P

Undskyld men forstår det ikke helt.. ;P
Avatar billede Claus Mattsson Nybegynder
03. januar 2011 - 22:46 #8
Til at linke til ens venner? Mange-mange relation...
F.eks 1-2, 1-3, 1-4

På den måde ved man at 1 er ven med 2, 3 og 4...

//CyberOpz
Avatar billede kasbas91 Nybegynder
03. januar 2011 - 22:50 #9
ja det var også sådan noget ala det der jeg mente..

Men ved ikke hvordan man kan lave det i php...

fx: Bruger ID'er: 1,2,3,4,5,9,10

Det vil sige jeg er venner med 1 og 2 og 3 og 4 og 5 og 9 og 10..

Men hvordan kan jeg gøre så der ikke sker fejl idet.

Hvis jeg sletter ven nummer: 4.

Så kommer der jo et komma for meget...


Er det sådan noget du også tænkte på ;P

Eller hvad :)
Avatar billede Claus Mattsson Nybegynder
03. januar 2011 - 22:57 #10
Ja du lister det via php. Du må vel lave en count på antallet af venner du har i tabellen. På den måde kender du også antallet af kommaer der skal sættes...
Avatar billede Claus Mattsson Nybegynder
03. januar 2011 - 22:57 #11
Skal nok nævnes at jeg ikke er php-mand, men kun udtalte mig omkring db designet...
Avatar billede kasbas91 Nybegynder
03. januar 2011 - 23:04 #12
Okay, men jeg har problemer omkring kodningen, fordi jeg ved godt,

hvordan man laver 1,2,3,4 osv.

Men jeg ved ikke hvordan jeg piller tallene fra hinanden uden komma.

Og fordeler dem ud til brugerene.. Som er på min venneliste.. ;P

Men alligevel tak for din hjælp omkring db designet... ;P
Avatar billede webweaver Praktikant
04. januar 2011 - 00:11 #13
Er ikke rigtig sikker på at jeg kan følge dig, men du leder efter en måde at splitte tallene op på ved komma'erne?

Så kan du bruge explode();

$tal = "1,2,3,4,5,6";
$id = explode(",", $tal);

Så har du de forskellige id's i et array.

$id[0] indeholder 1
$id[1] indeholder 2
osv ....
Avatar billede kasbas91 Nybegynder
04. januar 2011 - 01:15 #14
Jeg har fundet på noget andet...

$memberArray = array('1', '2', '3', '4', '5');

$implode = implode(' ', $memberArray);

echo $implode;
   
if(in_array($implode, $memberArray)) {
    echo 'Den findes i array.';
}

Men kan jeg ikk få in_array til at tjekke flere gange,

som du kan se har jeg jo lavet en implode som gør at

tallen bliver delt fra hinanden..

Så tænkte jeg at in_array kunne validere tallende..

Men hvorfor kan den kun tjekke et tal, og ikke dem alle sammen.
Avatar billede webweaver Praktikant
04. januar 2011 - 02:10 #15
Jeg kan ikke rigtig se hvad du prøver på må jeg indrømme.

Du bruger implode til at lave et array om til en streng.
$implode vil ende ud med at se således ud: 1 2 3 4 5

Så checker du om $implode er i det array som du lige har skabt $implode ud fra. Og det er den naturligvis ikke, da den søger efter værdien "1 2 3 4 5", hvilket du ikke har stående. Du har "1" stående, "2" stående og så videre ...

Hvorfor checker du om tallene i $implode er i $memberArray?
Det ved du jo at de er! Det er der du lige har taget dem fra for at skabe $implode.
Avatar billede kasbas91 Nybegynder
04. januar 2011 - 15:23 #16
Med implode skal den bruge et array at tjekke efter:

implode() [function.implode]: Argument must be an array.

Undskyld men du er lidt forvirrende..

Jeg laver et array, hvor jeg har nogle tal stående..

Og så bruger jeg implode for at dele talene fra hinanden.

Og med implode skal den jo vide hvor talene er henne...

Og det er det jeg har lavet..

Og så tænkte jeg bare om man ikke kunne lave noget med in_array

så den kunne tjekke på det hele, men det kan man self ikke...
Avatar billede webweaver Praktikant
04. januar 2011 - 16:49 #17
Implode checker ikke noget. Den laver bare et array om til en streng. Ligesom explode, laver en streng om til et array.

Hvorfor ønsker du at "dele" tallene? (du sætter bare mellemrum ind) Hvis du har et array med tallene i, så er det delt der. Rigtig delt altså!

Du kan godt bruge in_array, men ikke med implode som du ønsker.

Hvis du vil checke om en ven er på din venneliste,
skal du bruge dit array og vennen's id, og så checke om det er i array'et.

Noget ala

$friendId = 57;

if(in_array($friendId, $memberArray)) {
    echo 'Den findes i array.';
}
Avatar billede zynzz Praktikant
04. januar 2011 - 20:08 #18
Som webweaver skriver så er det måden du tjekker om personen allerede findes i arrayet, hvis du ønsker at validere om en bruger findes i databasen er du jo nød til at kalde databasen for at tjekke dette...

//ET EKSEMPEL:
$friendId = 57;

if(in_array($friendId, $memberArray) && tjekDatabase($friendId)) {
    echo 'Den findes i array.';
}else{
$memberArray[] = $friendId;
$indsaetIDatabase = implode(',', $memberArray);
//Opdatere din venneliste her
}
Avatar billede kasbas91 Nybegynder
05. januar 2011 - 17:10 #19
okay tak for hjælpen... læg et svar..
Avatar billede kasbas91 Nybegynder
10. januar 2011 - 13:06 #20
Så lukker jeg bare selv.. ;P
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