Ciao a tutti!
Ho una pagina in cui faccio una query a seconda di una select, elaboro alcuni risultati, e mentre stampo i record ne faccio una seconda per recuperarne altri.
Mi spiego meglio: se un utente vuole vedere solo i clienti che non han fatto alcun ordine viene lanciata la prima query, altrimenti viene eseguita la seconda.
Codice PHP:
// Qui recupero i primi record
if($selected == 'numeroordini0')
{
$verybigquery = "SELECT `a`.`customerid`, `a`.`email_address`, `a`.`firstname`, `a`.`lastname`, `a`.`postalcode` AS `postcode`, '0' AS `numorders`, '0' AS `avgmoneyspent` FROM `customers` AS a WHERE NOT EXISTS (SELECT * FROM `orders` AS b WHERE `b`.`customerid` = `a`.`V_customerid`) LIMIT 0, 100";
}
else // cioè se $selected == 'numeroordini>0'
{
$verybigquery = "SELECT `customers`.`postalcode`, `customers`.`customerid`, `customers`.`firstname`, `customers`.`lastname`, `customers`.`email_address`, ROUND( AVG( `orders`.`total_payment_received` ), 2) AS `avgmoneyspent`, max(`orders`.`orderdate`) AS `lastorderdate`, COUNT(`orders`.`recordid`) AS `numorders`, `postcodes`.`description` FROM customers, orders, postcodes WHERE `customers`.`customerid` = `orders`.`customerid` AND `postcodes`.`postcode` = `customers`.`postalcode` GROUP BY `customers`.`customerid` HAVING `numorders` > 0 LIMIT 0, 100";
}
I problemi che nascono sono sostanzialmente due:
[list=1][*]Devo usare due query diverse per fare la stessa cosa (recuperare gli stessi dati), il che diventa un problema quando bisogna - per esempio - aggiungere una colonna e modificarle entrambe[*]Eseguendo la prima query non riesco a recuperare tutti i risultati filtrati secondo i criteri che mi interessano[/list=1]
In particolare, se ho usato la prima query, al momento di stampare i risultati succede questo:
Codice PHP:
while( $r = mysql_fetch_array($results) )
{
if($selected == 'numeroordini0')
{
$area = mysql_fetch_array(mysql_query("SELECT `description` FROM `postcodes` WHERE `postcode` = '" . $r['postcode'] . "' LIMIT 1"));
$r['description'] = $area['description'];
}
echo '...';
}
Il codice, neanche a dirlo, è sporchissimo, avete qualche suggerimento per migliorarlo? (o per migliorare le query, forse è anche meglio).
Grazie in anticipo!
P.s.(tutto questo problema nasce dal fatto che MySQL non accetta nell'HAVING il valore 0 come risultato di un campo calcolato...
)