insert into avec condition

XxX
Invité n'ayant pas de compte PHPfrance

19 avr. 2010, 10:53

Bonjour, je voudrai faire une insertion conditionnelle.
Si ce que je veux rajouter dans la base est déjà dedans, on ne fait rien. Si il n'y est pas, on l'insère.

Pour information,j'ai une table sequencearn(Id_ARN,Sequence)
Le champs sequence est de type TEXT
J'ai trouvé sur internet différente possibilités
Aucune ne marche. Généralement,c'est une erreur de syntaxe.
Voici ce que j'ai testé :
--------------------------------------------------------------------------------------------------------------------------
IF NOT EXISTS( select Sequence,Id_ARN
from sequencearn
where Sequence  like "AAA"
and Id_ARN="11")

INSERT INTO sequencearn(Sequence,Id_ARN) VALUES ("AAA","11")
--------------------------------------------------------------------------------------------------------------------------
IF (select count(*) from sequencearn where Sequence="AAA")
THEN                             // j'ai essayé avec et sans THEN
INSERT INTO sequencearn( Sequence, Id_Org)
VALUES (
"AAA", "1"
)
--------------------------------------------------------------------------------------------------------------------------
insert into sequencearn(Sequence,Id_Org) VALUES (Sequence,Id_Org)where not exists 
(select Sequence,Id_Org
from sequencearn
where Sequence ="AAA" and Id_Org="1")
Je pense que la solution doit être évidente mais je la vois pas .
Toute aide sera donc la bienvenue :p

XxX
Invité n'ayant pas de compte PHPfrance

19 avr. 2010, 12:30

Bon ben j'ai trouvé un autre moyen plus simple.
Je l'ai fait en deux coups.
Dans le PHP, je fais un SELECT count(*) from sequencearn where Sequence= "AAA"
et puis le insert into se retrouve dans un if .
Si on a retrouvé aucun enregistrement, on procéde a l insertion.


le $s est la séquence récupéré quelque part ailleurs..
----------------------------------------------------------------------------------
$r ="SELECT count(*) FROM sequencearn where Sequence='".$s."'";
		$q = mysql_query($r);	
		$count = mysql_result($q,0,0);
		
		
			if($count == 0) {
	                           $sql ="INSERT INTO sequencearn (taille,Sequence,id_org)
		                   VALUES ('$taille','$s','$id')";
		                   $query2 = mysql_query($sql);
				}

XxX
Invité n'ayant pas de compte PHPfrance

19 avr. 2010, 12:31

Si ca peut aider quelqu un ca marche en tt cas

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 avr. 2010, 16:10

C'est une solution courante, merci d'être venu la poster.

Tu peux aussi mettre des contraintes d'unicité sur la table, ce qui lèvera une erreur si tu essaies d'insérer une ligne en doublon.