Record inesistente all'interno della clausola IN

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?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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 :)
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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?
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
F Problema pulsante cerca record su access Database 0
F access ricerca record con apostrofo. MS Access 0
T come ordinare dei record recuperati da due tabelle MySQL 0
T vista record tabellare MySQL 0
K form Inserimento record mysql PHP 2
R query DELETE non cancella i record PHP 1
M Accodare record presi da un altra tabella PHP 8
MarcoGrazia Trovare record nel database partendo da id non sequenziali PHP 6
G notifiche dekstop/mobile ogni volta che record è inserito/eliminato/aggiornato PHP 0
P Pagina modifica record che non funziona PHP 0
S Selezionare ultimo record di una sotto query MySQL 27
A Tabella con bottoni per aggiornamento record PHP 6
S Differenza date record successivi MS Access 7
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S Aggiornamento lista record Database 2
M Esportazione in CSV, salta il primo record PHP 4
T foreach e fetchAll dove recupero solo l'ultimo record PHP 5
A Raggruppare record con stessa data PHP 13
R Scorporare array e recuperare record tabella PHP 10
Tommy03 Select in ordine per numero di record MySQL 7
L Creazione di 2 o più record PHP 6
mazman mysqli_query() mi ritorna un array vuoto anche se presente un record nella tabella PHP 13
L contare record uguali in file csv PHP 4
M Estrapolare singoli record da intervallo (dal al/inizio fine) MS Access 0
max1974 [MySQL] Estrapolare record finti/inisistenti MySQL 9
G [PHP] Passare dati tra record PHP 4
G Cambiare colore ad un record database mysql MySQL 0
S elimina record sql asp classic Classic ASP 5
S [MS Access] Apertura Maschera su nuov record in base a determinato ID MS Access 0
M leggere con jquery/ajax in una function javascript record di database sql server Javascript 0
P [PHP] Stampare record di diverse tabelle ma con nomi uguali PHP 6
M [PHP] Selezione record da elenco PHP 24
A [MS Access] Aprire maschera con sottomaschera su ultimo record MS Access 0
C [PHP] Creare un Pulsante che ricopia valori di un campo in altro record PHP 4
C [MySQL] Copiare campi di un record in un nuovo record MySQL 0
O [PHP] Ricerca record tramite post PHP 7
GraceHawk [MS Access] Findfirst per ricerca record MS Access 1
C [PHP] scrivere o aggiornare record in tabella PHP 7
bubino8 Record A in CNAME Domini 2
L Mi trovo nell'impossibilità di eliminare un record nella tabella Database 1
M [PHP] Non calcola l'ultimo record inserito PHP 13
ste80 [MS Access] apertura maschera su record specifico MS Access 6
T PHP+MYSQL: stampare record con numero progressivo PHP 3
G [PHP] SALVARE RECORD ESTRATTI DA DATABASE PHP 6
M [PHP] Aggiornare i dati dei record selezionati PHP 3
M Aggioranre record in tabella PHP MYSQL PHP 2
K [Visual Basic] Stampa e modifica record non funziona più Visual Basic 0
C Contare numero record uguali Database 3
G [ASP] impaginazione record database Classic ASP 13
ste80 [PHP] cancellare/aggiornare record DB PHP 24

Discussioni simili