Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Query emulata con php

  1. #1

    Query emulata con php

    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... )
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  2. #2

    Re: Query emulata con php

    Originariamente inviato da iraiscoming223
    P.s.(tutto questo problema nasce dal fatto che MySQL non accetta nell'HAVING il valore 0 come risultato di un campo calcolato... )
    ma sei sicuro?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    sicuro sicuro no, ma ho provato in cento modi diversi e il risultato è sempre lo stesso...
    conoscendo la mia fortuna (la statistica è una scienza a me avversa) ho cercato su google e, pur non avendo trovato molto, mentre cerco tra i suggerimenti c'è "mysql having count 0", quindi apparentemente non sono l'unico...

    qualche consiglio?!
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  4. #4
    up
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  5. #5
    mica per altro, ma io usando mysql 5.5 e facendo having "campo_calcolato" = 0 la query funziona, quindi mi sa che sbagliavi la query prima. ricontrolla il tutto alla luce di questa informazione e testa nel database la query finchè non trovi la sintassi corretta
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.