[risolto] insert into if select non presente

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

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
 
insert into if select non presente

Separa la query in 2 query diverse:
1) controlla se esiste già
2) (se non esiste) inserisci
 
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
 
Fai il controllo prima di ogni query di inserimento così come dovresti fare anche se le query fossero unite.
 
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.
 
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:
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
 

Discussioni simili