s1gh Skrevet 10. januar 2009 Del Skrevet 10. januar 2009 Har nå kommet over et problem, jeg ikke helt skjønner hvordan jeg skal løse. Jeg har en database(tabell) med tre felt; id, tag & count. Og jeg har en form der jeg taster inn såkalte 'tags'. Ex: diskusjon internett forum. Jeg sender så disse over til en variabel, og bruker explode for å få disse ordene over til arrays. Så over til problemet... Jeg skal legge disse arrayene inn i en database. Og hvert array(ord) skal få 'sin egen plass'. Så etter at ordene har blitt lagret i databasen, skal den se sånn ut: id tag count 1 diskusjon 1 2 internett 1 3 forum 1 Her er koden jeg har nå: $tagg = explode(" ", $tags); $antall = count($tagg); for ($i = 0; $i <= $antall; $i++) { $sql2 = "INSERT INTO tags (tag) VALUES ('$tagg[$i]') ON DUPLICATE KEY UPDATE count=count+1"; if (!mysql_query($sql2, $con)) { die('Feil: '.mysql_error()); } } Trodde det skulle gå an med en for-loop. Sånn at den kjører en INSERT-metode på hver array. Men jeg har selvfølgelig gjort noe feil. Hvis det er noe dere ikke skjønner, ta kontakt. Kan også nevne at dette er en kode som skal brukes til en 'tagcloud'. Derfor jeg må ha 'egen plass' til hvert ord, sånn at jeg kan telle antall poster som har blitt tagged med den aktuell taggen. Og hvis noen kunne sagt ifra om jeg bruker INSERT-metoden riktig, evt. hva jeg burde ha forbedret, hadde det vært kjempeflott:) //s1gh Lenke til kommentar
Jonas Skrevet 10. januar 2009 Del Skrevet 10. januar 2009 (endret) For det første, dersom du ønsker å legge til et element i et array, så holder det ikke å bare tilegne variabelen en verdi, du må bruke følgende syntaks. $var[] = $val; Og for det andre, så støtter dessverre ikke mysql_query arrays. Prøv derfor noe slik. for ( $i = 0; $i < $antall; $i++ ) mysql_query ( 'INSERT INTO tags (tag) VALUES (\'' . $tagg[$i] . '\') ON DUPLICATE KEY UPDATE count = count + 1' ); Endret 10. januar 2009 av Jonas Lenke til kommentar
Alex Moran Skrevet 10. januar 2009 Del Skrevet 10. januar 2009 Du kan gjøre noe slikt som dette: <?php $tags = array('musikk', 'film', 'sport'); $sql = "INSERT INTO `tags` (`name`) VALUES ('".join("'),('", $tags)."') ON DUPLICATE KEY UPDATE count = count+1"; // INSERT INTO `tags` (`name`) VALUES ('musikk'),('film'),('sport') ON DUPLICATE KEY UPDATE count = count+1 // echo $sql; $query = mysql_query($sql); Lenke til kommentar
s1gh Skrevet 10. januar 2009 Forfatter Del Skrevet 10. januar 2009 (endret) Tusen takk for svar, men desverre fungerte ingen av delene. Det som skjer nå, er at det første ordet blir lagt inn i databasen, også blir det kjørt x antall count etterpå. Så jeg ender opp med, f.eks; id tag count 3 diskusjon 8 Så da kan jeg jo spørre, er det i det hele tatt mulig å løse dette problemet på en god måte? Endret 10. januar 2009 av Sigh Lenke til kommentar
s1gh Skrevet 10. januar 2009 Forfatter Del Skrevet 10. januar 2009 Jeg har nå løst dette problemet. Ikke akkurat den beste løsningen, men noen enkle if-statements gjorde susen. Lenke til kommentar
fezken Skrevet 10. januar 2009 Del Skrevet 10. januar 2009 Post løsningen din da, slik at tråden kan vere til hjelp for andre som evt. kommer opp i denne situasjonen Lenke til kommentar
Harald B Skrevet 10. januar 2009 Del Skrevet 10. januar 2009 Sigh, du skriver ikke noe om hva som faktisk er feil. Det jeg tror er problemet ditt ut ifra hva du skriver er at ON DUPLICATE KEY UPDATE krever en UNIQUE INDEX på `tag`kollonnen for å fungere slik du har tenkt. ALTER TABLE `tags` ADD UNIQUE INDEX (`tag`); Lenke til kommentar
Wackamole Skrevet 10. januar 2009 Del Skrevet 10. januar 2009 Vet ikke hvorfor men jeg får litt lyst og bruke while løkke, (egentlig bare fordi jeg bruker det mest) , men har ingen anelse om det ville være bedre enn for (each) - og btw, sql'en er som den skal være, støtter opp innlegget til Harald B Lenke til kommentar
s1gh Skrevet 16. januar 2009 Forfatter Del Skrevet 16. januar 2009 Beklager sent svar, men jeg fikk som sagt løst dette problemet. Men jeg ser nå at Harald B's løsning (sett at den virker) hadde vært mye mer elegant. Anyway, jeg kan poste hvordan jeg, på en ikke så elegant måte, løste dette problemet med if-statements: if ($antall == 1) { mysql_query( "INSERT IGNORE INTO tags (tag, count) VALUES ('$tagg[0]', 1) ON DUPLICATE KEY UPDATE count = count+1" ); } if ($antall == 2) { mysql_query( "INSERT IGNORE INTO tags (tag, count) VALUES ('$tagg[0]', 1), ('$tagg[1]',1) ON DUPLICATE KEY UPDATE count = count+1" ); } if ($antall == 3) { mysql_query( "INSERT IGNORE INTO tags (tag, count) VALUES ('$tagg[0]', 1), ('$tagg[1]',1), ('$tagg[2]',1) ON DUPLICATE KEY UPDATE count = count+1" ); } if ($antall == 4) { mysql_query( "INSERT IGNORE INTO tags (tag, count) VALUES ('$tagg[0]', 1), ('$tagg[1]',1), ('$tagg[2]',1), ('$tagg[3]',1) ON DUPLICATE KEY UPDATE count = count+1" ); } if ($antall == 5) { mysql_query( "INSERT IGNORE INTO tags (tag, count) VALUES ('$tagg[0]', 1), ('$tagg[1]',1), ('$tagg[2]',1), ('$tagg[3]',1), ('$tagg[4]',1) ON DUPLICATE KEY UPDATE count = count+1" ); } 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å