Visualizzazione dei risultati da 1 a 7 su 7

Discussione: query annidate msqli

  1. #1

    query annidate msqli

    ciao a tutti

    vorrei utilizzare 2 query annidate, in questo modo

    codice:
    $sql1="SELECT........";    
    if(!$result = $db->query($sql))    die('There was an error running the query [' . $db->error . ']');
            
        while($row = $result->fetch_assoc()){
            $sql2="SELECT........";
            if(!$result = $db->query($sql))    die('There was an error running the query [' . $db->error . ']');
            while($row = $result->fetch_assoc()){
                ........Utilizzare qui i risultati di sql2
            }
            Utilizzare qui i risultati di sql1
        }
    il problema è che l'arry "res" riusulta sovrascritto

    come posso risolvere?

  2. #2
    Prima di tutto, ovviamente se fai query diverse non puoi usare la stessa variabile

    A parte questo pero', delle query annidate eseguite cosi' sono quasi sicuramente la soluzione sbagliata a un problema che si risolve con una JOIN.

  3. #3
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Prima di tutto, ovviamente se fai query diverse non puoi usare la stessa variabile

    A parte questo pero', delle query annidate eseguite cosi' sono quasi sicuramente la soluzione sbagliata a un problema che si risolve con una JOIN.
    sono proprio due query distinte non risolvibili tramite join..

    ho provato a cambiare la variabile $result ma non ho ottenuto miglioramenti. potresti spiegarmi cosa cambiare?

  4. #4
    Proprio non riesco a farmi venire in mente un caso in cui una query annidata non dipenda in qualche modo da quella esterna. Se così fosse presumo che l'annidamento sia inutile e deve necessariamente esistere una soluzione più performante.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Quote Originariamente inviata da marste881 Visualizza il messaggio
    sono proprio due query distinte non risolvibili tramite join..

    ho provato a cambiare la variabile $result ma non ho ottenuto miglioramenti. potresti spiegarmi cosa cambiare?
    I casi sono due: o la seconda query dipende dalla prima (e quindi si puo' trasformare in una sola query con JOIN) oppure la seconda query non dipende dalla prima (e quindi non ha senso annidarle). In generale eseguire una query per ogni risultato di una query precedente, e' un buco di performance tremendo.

    Magari c'e' una terza possibilita', ma sinceramente non riesco a immaginarla.

  6. #6
    codice:
    $sql="SELECT a.idAtto,repertorio,raccolta,dtAtto,notaio  FROM attinotarili a ,immobiliAttiInt i WHERE( a.flgTipoImm='f'&&																													i.idImmobile='".$_GET['edificio']."'&&
    																													i.idPrj='".$_GET['prj']."'&&
    																													a.idAtto=i.idAtto)";																											
    	if(!$result = $db->query($sql))	die('There was an error running the query ['.$db->error.']');
    		
    	echo("Atti di acquisto dell'unità immbobiliare:<br>
    				<table border=\"1\"><tr><td>Atto corrente</td><td>Repertorio</td><td>Raccolta</td><td>Data</td><td>Notaio</td></tr>");
    				
    	while($row = $result->fetch_assoc()){
    
    
    		$sql="SELECT * from intestatari t,immobiliAttiInt i WHERE (t.idIntestato=i.idIntestato&&
    																i.idImmobile='".$_GET['edificio']."'&&
    																i.idPrj='".$_GET['prj']."'&&
    																i.IdAtto='".$row['idAtto']."')";
    		
    		
    		echo("<tr>
    				<td><input type=\"radio\" name=\"attuale\" value=\"".$row['idAtto']."\" /></td>
    				<td>".$row['repertorio']."</td>
    				<td>".$row['raccolta']."</td>
    				<td>".$row['dtAtto']."</td>
    				<td>".$row['notaio']."</td>
    		</tr>");
    		if(!$result = $db->query($sql))	die('There was an error running the query ['.$db->error.']');
    		while($row2 = $result->fetch_assoc()){
    			echo("<tr><td colspan=\"5\">".$row2['idIntestato']."</td></tr>");
    		}
    	}
    ecco il codice

  7. #7
    A me sembra che la seconda query dipenda dalla prima per idAtto.

    P.S.
    A parte che stai sovrascrivendo anche $result
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.