[risolto] insert into if select non presente

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve a tutti,

ho un problema che non so bene come risolvere.

Per evitare macchinose ricerche e script pensavo di poter fare un insert into direttamente verificando una select.

Ad esempio ho una serie di dati in un array e devo fargli fare l'insert se i dati all'interno non sono presenti in tabella.

Perciò una cosa del genere

PHP:
INSERT INTO tabella VALUES('','".$campo1."','".$campo2."','".$campo3."') WHERE
e qua inserirgli una condizione del tipo

PHP:
NOT (SELECT id from tabella where campo1=$campo1 AND campo2='$campo2'......etc.
come si costruisce un insert cosi?

Grazie
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
e longo ho già provato cosi ma la query è inserita in un ciclo.

quindi ad esempio mi fa 5 query e magari in una trova i dati inseriti e non passa all'insert e quindi non mi inserisce le altre 4
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
scusa longo ma forse non mi sono spiegato bene.

la query di controllo io l'avevo prevista ma questa è all'interno di un foreach che scorre un multiarray. Se gli elementi sono 5 e ne trova uno solo per mysql la query è comunque piena pertanto nonr iesco a far inserire i dati delle altre 4.


questo il codice
PHP:
foreach($array as $KEY=>$part){
foreach($part as $key=>$part1){
$sqlquery = "SELECT * FROM tabella  WHERE campo1='".$KEY."' AND campo2='".$key."' AND campo3='".$part1['campo3']."'";
$result = mysql_query($sqlquery);
while ($linea = mysql_fetch_array($result)) {
$xxx=$linea['Id'];
}

if(!$xxx){
$sqlquery = "INSERT INTO tabella  VALUES('','".$key."','".$part1['campo3']."','".$KEY."','".$part1['campo4']."','".$part1['campo5']."','','0','')";
$result = mysql_query($sqlquery);
}
}
}
questa funziona finchè il contenuto dell'array è completamente assente nella tabella ma se trova un elmento non funge più.

magari sbaglio l'if o mi sto incasinando.

ma in mysql non è ppossibile fare una cosa del genere come ho descritto sopra?

mi eliminerebbe sto problema e cmq faciliterei il controllo.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
secondo me, evitando anche un while, i sistema migliore è
PHP:
<?php
foreach($array as $KEY=>$part){
	foreach($part as $key=>$part1){
		$sqlquery = "SELECT * FROM tabella  WHERE campo1='".$KEY."' AND campo2='".$key."' AND campo3='".$part1['campo3']."'";
		$esiste = mysql_num_rows(mysql_query($sqlquery));
		if($esiste==0){
			$sqlquery = "INSERT INTO tabella  VALUES('','".$key."','".$part1['campo3']."','".$KEY."','".$part1['campo4']."','".$part1['campo5']."','','0','')";
			$result = mysql_query($sqlquery);
		}
	}
}  
?>
questo se non ho capito male quello che vuoi fare

non avevo visto il post di longa, penso meglio ancora
 
Ultima modifica:

Monital

Utente Attivo
15 Apr 2009
778
2
18
Grazie ad entrambi. preferisco al soluzione di borgo solo perchè le due query sono un pò complesse e quindi il codice di borgo è + semplcie per la modifica.

però..........

sono stato uno stupido a non pensare a mysql_num_rows

grazie