Avatar billede jop... Nybegynder
01. september 2007 - 12:47 Der er 12 kommentarer og
1 løsning

"Insert into" med overskriv

Jeg har brug for at kunne overskrive nogle data i en database, kan man ikke lave noget ala:

$insertSQL = "insert into individuel_rang (userid, type, rangliste, spillernavn, turn, point, niveau)
              values ('$infoid', '$type', '$rangliste', '$spillernavn', '$turn', '$point', '$niveau') where userid = $infoid && type = $type"

Den her virker i hvert fald ikke :o)

Jeg vil gerne være fri for update, da den vel kræver at der altid er en post den kan opdatere?

Alternativet er vel at undersøge om der er en post og så agere ud fra det.

En insert med "overskriv" ville jo bare udmiddelbart være en nem løsning  :o)
Avatar billede keysersoze Guru
01. september 2007 - 13:16 #1
Der findes ikke en automatisk "update hvis findes ellers indsæt" - så du er nødt til på forhånd at vide eller finde ud af om der findes en post eller ej.
Avatar billede erikjacobsen Ekspert
01. september 2007 - 13:53 #2
Der findes ikke en "update hvis findes ellers indsæt", men der findes en "slet hvis findes og indsæt". Den hedder REPLACE, men den kan normalt ikke anbefales.

Hvad er mest almindeligt?

1) INSERTs mest almindelig: Indsæt og check om du får en primary-key fejl. I så fald skal du lave en UPDATE i stedet for.

2) UPDATEs mest almindelig: Lav en update med primary-key i WHERE delen. Hvis den ikke ramte en række (affected-rows=0), så lav din INSERT.
Avatar billede jop... Nybegynder
01. september 2007 - 14:06 #3
Hej Erik.

Ved du hvorfor den ikke kan anbefales.

Har du et eksempel hvor nummer 2 er brugt?
Avatar billede erikjacobsen Ekspert
01. september 2007 - 14:22 #4
Jah, REPLACE
1) er dyr: en sletning og insert, der ændrer på index-er etc.
2) vil ændre et evt. autoincrement-felt
3) er et par millioner lysår væk fra eksisterende standarder.

Der bør være nogle eksempler, der ligner, på http://php.net/mysql_affected_rows
Avatar billede jop... Nybegynder
01. september 2007 - 15:52 #5
Hej Erik.

Jeg er hoppet på affestec rows.

Jeg har lavet følgende kode:
-----------------------------------------------------------------------------------
include("includes/conn.php");
            $insertSQL = "update individuel_rang set userid='$infoid', type='type', nyrang='nyrang', glrang='glrang', spillernavn='spillernavn', turn='turn', nypoint='nypoint', glpoint='glpoint', niveau='niveau' where userid = $infoid && type = $type";
              mysql_query($insertSQL) or die(mysql_error());
           
            // tester om der er en række om der er en række der er opdateret, eller om der skal laves en ny.
            $test = mysql_affected_rows();
            if($test == 0) {
           
            $insertSQL = "insert into individuel_rang (userid, type, nyrang, glrang, spillernavn, turn, nypoint, glpoint, niveau)
            values ('$infoid', '$type', '$nyrang', '$glrang', '$spillernavn', '$turn', '$nypoint', '$glpoint', '$niveau')";
mysql_query($insertSQL) or die(mysql_error());
}
------------------------------------------------------------------------------------

Den kommer med fejlen:
Unknown column 'HS' in 'where clause'

Kan du se, hvor jeg fejler?
Avatar billede jop... Nybegynder
01. september 2007 - 15:58 #6
userid = '$infoid' && type = '$type'";

Dum fejl.

Vil du smide et svar? Jeg vil gerne snart have lov til at give dig nogle point  ;o)
Avatar billede jop... Nybegynder
01. september 2007 - 16:03 #7
Ja, ok ny tilføjer den bare rækker. opdaterer aldrig.
Avatar billede erikjacobsen Ekspert
01. september 2007 - 17:02 #8
Ja, den burde jo virke - kan du være mere præcis med hvad du putter ind i den, når den ikke vil lave en update (fx. udskrive SQL-sætningerne) ?
Avatar billede erikjacobsen Ekspert
01. september 2007 - 17:05 #9
Åh, ja, med mindre du laver en update, der ikke ændrer noget som helst i felterne. Så vil den ikke lave noget. Jeg har selv typiske et "sidst opdateret" felt, der i hvert fald ændrer sig - så den havde jeg ikke lige tænkt på.
Avatar billede erikjacobsen Ekspert
01. september 2007 - 17:15 #10
Der er faktisk en kommentar fra 09-Dec-2002 02:04 på mit link ovemfor, med en tilsvarende løsning.
Avatar billede jop... Nybegynder
01. september 2007 - 17:38 #11
Je ghar lige selv fundet det samme på eksemplerne i php-manualen. Tusind tak for hjælpen. Smider du ikke et svar?
Avatar billede erikjacobsen Ekspert
01. september 2007 - 17:47 #12
Nej tak, jeg samler slet ikke på point. Men du må gerne komme og slå min græsplæne ...
(bare en spøg). Svar selv, accepter eget svar.
Avatar billede jop... Nybegynder
01. september 2007 - 17:59 #13
Ok.. :-)  Tak for hjælpen endnu engang.
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
Computerworld tilbyder specialiserede kurser i database-management

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