Als waarde bestaat Update anders Insert (opgelost)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Raymond

raymond

28/09/2007 16:01:00
Quote Anchor link
ik wil een query maken die update als het product bestaat en als hij niet bestaad dat hij dan een insert uitvoerd iemand een idee of dit mogelijk is zo ja hoe moet ik zo iets opbouwen?
Gewijzigd op 01/01/1970 01:00:00 door Raymond
 
PHP hulp

PHP hulp

28/11/2024 22:45:15
 
TJVB tvb

TJVB tvb

28/09/2007 16:06:00
Quote Anchor link
Kijk eens naar replace:
mysql.com:
REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted.

http://dev.mysql.com/doc/refman/5.0/en/replace.html
 
Raymond

raymond

28/09/2007 16:08:00
Quote Anchor link
hij mag alleen niet de bestaande regel weggooien
 
Raymond

raymond

28/09/2007 16:12:00
Quote Anchor link
$qstring="UPDATE sfeerpages SET name='".$name."', afbeelding='".$afbeelding."', tekst='".$tekst."' WHERE cat=".$cat."";
$result=mysql_query($qstring);
if($result === false)
{
return mysql_error();
}
else
{
return $result;
}
}//einde functie

dit is de code die ik nu gebruik. ff ter verduidelijking
als de cat niet bestaat moet er dus een insert gemaakt worden.
 
Frank -

Frank -

28/09/2007 16:14:00
Quote Anchor link
Dat zijn eigenlijk 2 queries en een tabel die unieke gegevens bevat. Je zult dus ergens een UNIQUE op 1 of meerdere kolommen moeten hebben.

Je kunt met de bijzondere MySQL-syntax aan de slag gaan, maar je zou ook een 2 standaard queries kunnen uitvoeren.
1) INSERT de gegevens die je wilt invoeren.
2) Controleer of de INSERT is mislukt en foutnummer 1062 (in MySQL) heeft opgelevert.
3) 1062? Dan bestaat het record blijkbaar al, er is een UNIQUE-constraint overtreden. Voer nu de UPDATE-query uit.
4) Controleer of de UPDATE correct is uitgevoerd en slechts 1 record heeft aangepast.

Deze opzet werkt in iedere database, dus niet alleen MySQL. Je zult bij andere databases alleen even moeten zoeken naar de specifieke foutmelding. PostgreSQL geeft bv. exact aan welke UNIQUE-constraints zijn overtreden, MySQL roept alleen maar dat er ergens iets is overtreden.

Overigens kun je dit soort zaken nog beter in een TRANACTION doen, zeker omdat je met een UPDATE werkt. In MySQL ben je dan wel verplicht om met innoDB te werken.
 
Raymond

raymond

28/09/2007 16:27:00
Quote Anchor link
ik d8 dat het ook met een sql comando kan.
zoiets if ($result == iets){

}
 
Frank -

Frank -

28/09/2007 17:05:00
Quote Anchor link
raymond schreef op 28.09.2007 16:27:
ik d8 dat het ook met een sql comando kan.
zoiets if ($result == iets){

}
Het zal ongetwijfeld aan mij liggen, maar ik heb geen idee wat je hier probeert te zeggen. Gokje: Heb je het over de foutafhandeling?
 
Josh

Josh

28/09/2007 17:32:00
Quote Anchor link
Zou je wellicht iets kunnen met de syntax "INSERT ... ON DUPLICATE KEY UPDATE" ??
In feite doet deze het precies andersom als wat jij aangeeft: eerst insert, als dat mislukt door een dubbele waarde, dan bestaande row updaten. Dit geeft hetzelfde resultaat.
Zie de handleiding
 
Raymond

raymond

01/10/2007 11:51:00
Quote Anchor link
het is opgelost

ik voor een simple check uit op de rijen en naar het resultaat van die check een update insert.

zie hieronder de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?

function updateContentSfeer($cat, $name, $afbeelding, $tekst) {
        include("conectPol.php");
            $qstring="SELECT * FROM sfeerpages WHERE cat=".$cat."";
            $result=mysql_query($qstring);
                if (mysql_num_rows($result) == 1)
                {

                    $qstring="UPDATE sfeerpages SET name='".$name."', afbeelding='".$afbeelding."', tekst='".$tekst."' WHERE cat=".$cat."";
                    $result=mysql_query($qstring);
                    if($result === false)
                        {

                        return mysql_error();
                        }

                    else
                        {
                        return $result;                    
                        }
                }

                else
                {
                    $qstring="INSERT INTO sfeerpages  (cat, name, afbeelding, tekst) VALUES (".$cat.", '".$name."', '".$afbeelding."', '".$tekst."')";
                    $result=mysql_query($qstring);
                    if($result === false)
                        {

                        return mysql_error();
                        }

                    else
                        {
                        return $result;                    
                        }
                }
        }

?>


bedankt allemaal voor de snelle hulp!!!
 
Josh

Josh

01/10/2007 12:41:00
Quote Anchor link
Dit zou ook moeten werken, en is wat korter en sneller.
Hier heb je maar één query in plaats van 2. Hierbij is het wel nodig om het veld cat als UNIQUE te definiëren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

   $qstring
="INSERT INTO sfeerpages
      (cat, name, afbeelding, tekst)
   VALUES
      ("
.$cat.", '".$name."', '".$afbeelding."', '".$tekst."')
   ON DUPLICATE KEY UPDATE
      name='"
.$name."',
      afbeelding='"
.$afbeelding."',
      tekst='"
.$tekst."'";

?>
 
Klaasjan Boven

Klaasjan Boven

01/10/2007 12:52:00
Quote Anchor link
@Josh je mist SET
 
Josh

Josh

01/10/2007 13:10:00
Quote Anchor link
Klaasjan, voor zover ik uit de documentatie kan halen is SET niet benodigd in deze context
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.