la query precedente è inefficiente per le versioni più vecchie di mysql conviene controllare explain
la query precedente è inefficiente per le versioni più vecchie di mysql conviene controllare explain
Puoi spiegarmi la query , a me sembra funzionale , il sito è nuovo , cosaintendi per versioni vecchie di sql ?
dovrebbe eliminare questo codice :
Qui come risultato ho l'id user e l'id del comune ....ora vorrei poter trovare gli annunci di questo user conservando però l'id del comune (meglio sarebbe il nome)codice://recupero il record della provincia seleionata $sql="SELECT id,provincia FROM province where provincia='$provincia'"; echo '<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>Sql:'.$sql; $result=mysql_query($sql); $prov=mysql_fetch_assoc($result); //recupero l'id della provincia $idprov=$prov['id']; echo 'idprov:'.$idprov; //recupero tutti i comuni della provincia $sql2 ="SELECT id,id_provincia FROM comuni where id_provincia='$idprov'"; $result2 = mysql_query($sql2); //creo un array con tutti gli id dei comuni $arraycomuni=array(); //scorro i risultati e inserisco nell'array gli id dei comuni while($row=mysql_fetch_assoc($result2)){ array_push($arraycomuni, $row['id']); } //Creo un array per inserire tutti gli user dei comuni della provincia $arrayuser=array(); //scorro i risultati e inserisco nell'array tutti gli user di quella provincia foreach($arraycomuni as $k => $v){ $sql3 ="SELECT citta,id FROM user WHERE citta='$v'"; $result3 = mysql_query($sql3); while($row=mysql_fetch_assoc($result3)){ array_push($arrayuser, $row['id']); } }
La query sostituisce la parte di codice che hai evidenziato,
certo, con rispetto all'appunto di MySQL sulla velocità di risposta, è necessario che i campi di ricerca siano indicizzati
in particolare devi indicizzare,
id della provincia che si trova nella tabella comuni,
id del comune che si trova nella tabella user
poi se vuoi strafare puoi indicizzare anche la "provincia" con cui fai la ricerca nella tabella provincie
in questo modo dai efficienza alle ricerche
la query che ti ho indicato estrae "citta" e "id" dello user, come la tua originale,
ma puoi aggiungere altre info sempre della tabella user
la query estrae i record da "user",
verificando che siano presenti nei risultati delle select "a monte"
cerca solo di aggiungere al tuo db gli indici che ti ho indicato
Ringraziandoti per ora il risultato finale dovrebbe essere quello di estrarre dal DB tutti gli annunci della provincia , secondo te e possibile creare una sola query in cui ho tuttii campi degli annunci e il nome del comune?
ancora, spero di non essermi incasinato con i nomi dei campi
attenzione ad offerte.*, scritta in questo modo ti estrae tutte le combinazioni differenticodice:SELECT DISTINCT offerte.*, user.citta FROM offerte, user WHERE citta in ( SELECT id FROM comuni WHERE id_provincia in ( SELECT id FROM province WHERE provincia='$provincia' ) ) AND offerte.iduser=user.id AND offerte.attiva=1 ORDER BY DATA ASC
estrae in ogni caso solo in presenza sia di user che di offerte (dovrebbe essere logico ma bene precisarlo)
prova a vedere se ti "garba", fai sapere