Permalänk
Medlem

Overwrite SQL-INSERT?

Det jag undrar är om det finns något sätt att köra en INSERT som om

1) Det inte existerar en rad som har de värdena, kör en INSERT
2) Om det existerar en rad som har de värdena, kör en UPDATE.

Det jag vill göra är att uppdatera raden om den finns, sätta in den om den inte finns, i EN query.

Visa signatur

Let me tell you something. You don't have to say anything, you know why? Cause you can pick up all your stuff, because you're mother-fucking fired! | Lemeno.se - En blogg om att Tjäna Pengar På Internet | Min blogg om styrketräning och kost

Permalänk
Medlem

$q = mysql_query("SELECT * FROM `tabell` WHERE `det du tänker sätta in finns`"); if(mysql_num_rows($q) > 0) { $q = mysql_query("UPDATE `tabell`..."); } else { $q = mysql_query("INSERT INTO ..."); }

Permalänk
Medlem

Läser folk inte?

Citat:

Ursprungligen inskrivet av Purren
Det jag vill göra är att uppdatera raden om den finns, sätta in den om den inte finns, i EN query.

Och dessutom gör ditt exempel en query för mycket. Det räcker med att kolla mysql_affected_rows på UPDATE'en för att se om det fanns en rad eller inte.

Visa signatur

Let me tell you something. You don't have to say anything, you know why? Cause you can pick up all your stuff, because you're mother-fucking fired! | Lemeno.se - En blogg om att Tjäna Pengar På Internet | Min blogg om styrketräning och kost

Permalänk
Medlem
Permalänk
Medlem

Tack Isen, precis det jag letade efter.

Visa signatur

Let me tell you something. You don't have to say anything, you know why? Cause you can pick up all your stuff, because you're mother-fucking fired! | Lemeno.se - En blogg om att Tjäna Pengar På Internet | Min blogg om styrketräning och kost

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Purren
Läser folk inte?

Och dessutom gör ditt exempel en query för mycket. Det räcker med att kolla mysql_affected_rows på UPDATE'en för att se om det fanns en rad eller inte.

Nu är jag förvisso nyvaken, men hans kod gör väl precis det du ber om?

För det andra så borde det vara REPLACE du är ute efter om det är primärnyckeln som identifierar raden. Om det är andra regler som avgör om raderna är lika så får du gå på tidigare nämnda lösning.

Permalänk
Medlem

Ja, det gör den. Men det var detta som var nyckeln:

Citat:

Ursprungligen inskrivet av Purren
i EN query.

Hans kör tre stycken.

Det går att göra samma sak med två, men jag var ute efter en.

Visa signatur

Let me tell you something. You don't have to say anything, you know why? Cause you can pick up all your stuff, because you're mother-fucking fired! | Lemeno.se - En blogg om att Tjäna Pengar På Internet | Min blogg om styrketräning och kost

Permalänk
Medlem

Jag failade lite att läsa. Jag är också nyvaken.
http://dev.mysql.com/doc/refman/5.0/en/replace.html
eller vad Isen föreslog. Beroende på vad du vill åstadkomma.

Permalänk
Medlem

Jag skyller min barskhet på nyvakenheten också

INSERT ON DUPLICATE verkar vara snabbare än REPLACE av det jag uppfattar från kommentarerna, så jag kör nog på det.

Visa signatur

Let me tell you something. You don't have to say anything, you know why? Cause you can pick up all your stuff, because you're mother-fucking fired! | Lemeno.se - En blogg om att Tjäna Pengar På Internet | Min blogg om styrketräning och kost

Permalänk
Medlem

Jag vill påpeka att det finns en väsentlig skillnad mellan REPLACE och ON DUPLICATE KEY UPDATE, och det är att när en krock förekommer så tar den förra satsen bort existerande data och gör sedan en INSERT medans den senare gör en UPDATE. Om det finns kolumner i tabellen som utelämnas i queryn som kommer de alltså att behandlas olika i de olika fallen.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Purren
Ja, det gör den. Men det var detta som var nyckeln:

Hans kör tre stycken.

Det går att göra samma sak med två, men jag var ute efter en.

För att vara petig så finns det ingenting som säger att det MÅSTE gå med en query. Nu råkar MySQL ha REPLACE, men det är inte många databasservrar som har det.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.