Record inesistente all'interno della clausola IN

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

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve,

effetuando una query con la clausola IN mi sono imbatutto in una cos che non riescoa capire come superare

PHP:
$sqlquery = "SELECT * FROM tabella2 WHERE ID IN($id)";

$id è un array che ho imploso e facendo var_dump ,i da la query corretta

PHP:
$sqlquery = "SELECT * FROM tabella2 WHERE ID IN('1','2','3',4')";

ora però io devo ricavare il campo "Citta" di questi 4 id che provengono da un altra tabella(tabella1).

ora dal risultato di questa query devoa ssegnare ad esempio dei colori tipo
PHP:
if($citta== Bari) verde
elseif($citta==venezia) marrone
elseif(empty($citta)) blu

ora però se nella tabella 2 non trova uno degli id mi sviluppala condizionesolo sui due campi esistenti:

quindi se nella tabella2 l'id 4 non esistelui non me lo considera proprio ivnece io devo verificare anche che uno dei vari id presenti in IN sia assente

comq posso risolvere sta cosa?
 
Dimenticavo:

ho fatto questa prova
PHP:
$sqlquery = "SELECT * FROM Tabella WHERE ID  IN($id)";
$result = mysql_query($sqlquery);
while($riga=mysql_fetch_array($result)){
$ID=$riga['ID'];
$citta[$ID]=$riga['Citta'];
}
foreach($citta as $key=>$cat){
if (!$cat[$key]) {
$colore=blu;
}else{
$colore= verde;
}


echo $colore."<br>";

}

in questo caso lui verifica tutti gli id però non trovandone uno mi restituisce tutto blu invece di darmi blu per l'inesistente e verde per gli altri 3
 
ciao
sempre che non abbia capito male, prova in questa maniera
PHP:
<?php
$sqlquery = "SELECT * FROM Tabella WHERE ID  IN($id)";
$result = mysql_query($sqlquery);
while($riga=mysql_fetch_array($result)){
$ID=$riga['ID'];
$citta[$ID]=$riga['Citta'];
}
/*ipotizzando che come hai detto l'id 4 non esista in tabella2
l'arry citta diventa (metto nomi città a caso)

$citta[1]=> "bolzano"
$citta[2]=> "trento"
$citta[3]=> "trieste"
*/
foreach($id as $val){
	if(isset($citta[$val])){
		echo "<span style=\"color:#00FF00;\">citta[$val]= ".$citta[$val]." esiste</span><br>"
	}else{
		echo "<span style=\"color:#FF0000;\">citta[$val] non esiste</span><br>"
	}
}
?>
se non funzia sei al punto di prima :)
 
1) non ti consiglio di chiamare le tabelle con nomi del tipo 'tabella_n' oppure 'tab' bensì di chiamarlo con nomi che siano attinenti ai dati da esse contenuti;
2) se non erro il foreach così come lo hai utilizzato tu non funziona comunque.
PHP:
foreach($citta as $key=>$cat){ 
if (!$cat[$key]) { 
...
}
}
In $cat c'è già il valore 'Bari' o quello che è. Quindi prova a modificare la condizione in questo modo:
PHP:
if (!$cat) { 
...
}
3) hai provato a lanciare la query direttamente in phpmyadmin?
 
1) non ti consiglio di chiamare le tabelle con nomi del tipo 'tabella_n' oppure 'tab' bensì di chiamarlo con nomi che siano attinenti ai dati da esse contenuti;
2) se non erro il foreach così come lo hai utilizzato tu non funziona comunque.

In $cat c'è già il valore 'Bari' o quello che è. Quindi prova a modificare la condizione in questo modo:
PHP:
if (!$cat) { 
...
}
3) hai provato a lanciare la query direttamente in phpmyadmin?

si ovviamente il nome "tabella" era per esempio.

il codice di bongo non funge e nemmeno con !cat avevo già provato, la query direttamente da phpmyadmin ovvaimnte mi restituisce solo gli id che trova se in $id sono presenti 1,2,3,4 e nella tabella ci sono solo gli $id 1,2,4 mi estrae solo le righe degliid 1,2,4 quindi in cat mi escono solo le righe degli id 1 2 4

cmq ho risolto usando un pò di ragionamento seppur non è una cosa molto pulita
ho invertito le chiavi dell'array originale
PHP:
$newcalc=array_flip($id_array);

poi ho isolato gli id che sono presenti in $id_array e assenti in $newid(che sono gli id delle righe trovate

PHP:
$vuote= array_diff_key($newcalc,$newid);
in
ho riunito gli array e poi ho eseguito il foreach

PHP:
$v=$vuote+$newid;
ksort($v);
foreach($v as $cat){
///....bla bl bla
}

non è molto pulito però al momento non mi veniva altro
 
ciao
per provare ho creato la tabella
CREATE TABLE `tabella` (
`ID` INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`Citta` VARCHAR( 250 ) NOT NULL
) ENGINE = MYISAM ;
e messo
1 bolzano
2 trento
3 trieste
e fatto alcune prove
PHP:
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$db = 'prove';
//---connessione----------------------------------------------------
$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
$sel = @mysql_select_db($db) or die (mysql_error());

//$id=array('1', '2', '3', '4');//se l'array che ti risulta è per gli ID è questo
$id=array(1, 2, 3, 4);//o così
//modifica la query
$sqlquery ='SELECT * FROM tabella  WHERE ID IN (' . implode(',', array_map('intval', $id)) . ')';
var_dump($sqlquery);echo "<br>";
$result = mysql_query($sqlquery);
while($riga=mysql_fetch_array($result)){
	$ID=$riga['ID'];
	$citta[$ID]=$riga['Citta'];
} 

foreach($id as $val){
    if(isset($citta[$val])){
        echo "<span style=\"color:#00FF00;\">citta[$val]= ".$citta[$val]." esiste</span><br>";
    }else{
        echo "<span style=\"color:#FF0000;\">citta[$val] non esiste</span><br>";
    }
}
?>
e questo è l'output
string(44) "SELECT * FROM tabella WHERE ID IN (1,2,3,4)"
citta[1]= bolzano esiste
citta[2]= trento esiste
citta[3]= trieste esiste

citta[4] non esiste
 

Discussioni simili