Gå til innhold

[Løst]MySQL og arrays


Anbefalte innlegg

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

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

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

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

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

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...