Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 34
  1. #1

    [PHP Mysql] Trovare clienti con ordini inferiori a TOT

    Ciao, ho questa query per trovare gli utenti che hanno effettuato ordini per un Totale superiore a 100 €, ma non riesco ad adattarla per trovare quelli che non hanno ordini o ce l'hanno inferiori a 100!
    Mi sapreste aiutare?
    Codice PHP:
    $query mysql_query("SELECT
        
    $user_tabella.*,
        Count(
    $ordini_tabella.ordine) AS Numero,
        Sum(
    $ordini_tabella.ordine) AS Somma
        FROM
        
    $user_tabella$ordini_tabella
        WHERE
        
    $user_tabella.codice=$ordini_tabella.codcliente
        GROUP BY 
    $user_tabella.nome
        HAVING Sum(
    $ordini_tabella.ordine)>100"); 
    Struttura db:
    Ordini
    id | codcliente | ordine (totale speso)

    Clienti
    codice | nome | ecc..

    Ho provato a cambiare il segno da MAGGIORE a MINORE però mi ritorna 0 su un db di 1000 :quipy:
    grazie
    Vla
    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

  2. #2
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Prova così:

    $query = mysql_query("SELECT
    $user_tabella.*,
    Count($ordini_tabella.ordine) AS Numero,
    Sum($ordini_tabella.ordine) AS Somma
    FROM
    $user_tabella LEFT JOIN $ordini_tabella
    ON
    $user_tabella.codice=$ordini_tabella.codcliente
    GROUP BY $user_tabella.nome
    HAVING Sum($ordini_tabella.ordine)<100");

  3. #3
    E' ok, grazie , solo che mi mancano all'appello un 150 di utenti.. come mai?
    Gli ordini in tabella sono solo 2 così individuo i vari utenti piu facilmente (nelle prove intendo :gren: )
    Quindi gli utenti dovrebbero essere TUTTI-2 che hanno comprato per piu di 100€



    ricapitolo:

    utenti tot: 1500
    che hanno comprato: 2
    che hanno pagato piu di 100: 2

    quindi gli utenti 'pulciari' dovrebbero essere 1498 xò mi torna tipo 1317 :master:
    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

  4. #4
    Cioè..sintatticalmente è giusta una query così? Lo chiedo perchè mi da un risultato 'anomalo'.. ho 1500 record di utenti, e solo 2 hanno acquistato.. quindi per forza dovrebbe tornarmi almeno 1498 records, invece me ne torna 1317

    $query = mysql_query("SELECT
    $user_tabella.*,
    Count($ordini_tabella.ordine) AS Numero,
    Sum($ordini_tabella.ordine) AS Somma
    FROM
    $user_tabella LEFT JOIN $ordini_tabella
    ON
    $user_tabella.codice=$ordini_tabella.codcliente
    GROUP BY $user_tabella.nome
    HAVING Sum($ordini_tabella.ordine)<100");

    se è giusta allora cerco il problema da un'altra parte.. :quipy:
    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

  5. #5
    Sintatticamente e' corretta. Ma anche frasi come:

    "Mi consenta, le diminuisco le tasse" oppure "In caso di pioggia spegnere la luna" lo sono..... pero' risultano oggettivamente inconcludenti.

    Tieni presente che hai una condizione e raggruppi i dati per nome, quindi il totale dei record sara' quello che otterrai sommando il dato di COUNT e non il numero dei record estratti.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    le prove le facevo in locale..ora invece ho provato sul web e invece di 1498 mi torna 19 su un tot di 1500

    e calcolando che gli acquisti in TOT sono stati 2, mi sembra molto assurdo :master:
    Codice PHP:
    $query mysql_query("SELECT 
    $user_tabella.*, 
    Count(
    $ordini_tabella.ordine) AS Numero, 
    Sum(
    $ordini_tabella.ordine) AS Somma 
    FROM 
    $user_tabella LEFT JOIN $ordini_tabella 
    ON 
    $user_tabella.codice=$ordini_tabella.codcliente 
    GROUP BY 
    $user_tabella.nome 
    HAVING Sum(
    $ordini_tabella.ordine)<100"); 
    Forse è corretta sintatticamente ma non produce il risultato atteso..
    Cerco di 'spiegarmi' la query..

    [ query ]
    SELEZIONA tutti gli utenti (contando gli ordini, e facendone la somma) DALLA TABELLA 'utenti'; Includi nei risultati solo gli utenti con almeno un record nella TABELLA 'ordini' la cui SOMMA è inferiore a 100; RAGGRUPPA per 'nome' (cioè togli i record con nomi ripetuti..ho anche provato a raggruppare per mail ma niente..)
    [/ query ]

    Non è proprio quello che mi serve perchè se un utente non ha nemmeno un ordine non sarà conteggiato e mostrato!

    Si può mettere un OR nella query del tipo:
    ....LEFT JOIN $ordini_tabella ON $user_tabella.codice=$ordini_tabella.codcliente
    OR $ordini_tabella.codcliente = NULL
    ?

    grazie :adhone:
    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

  7. #7
    Prova a postare le strutture delle tabelle.....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utenti
    | codice | nome | indirizzo | cap | citta | provincia | telefono | email | username | password |

    Ordini
    | codice | dataregistrazione | codcliente | codvettore | spedizione | ordine | status

    PS: dovrei trovare TUTTI gli utenti eccetto quelli con ORDINI superiori a 100€
    :adhone:
    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

  9. #9
    Originariamente inviato da vla
    Utenti
    | codice | nome | indirizzo | cap | citta | provincia | telefono | email | username | password |

    Ordini
    | codice | dataregistrazione | codcliente | codvettore | spedizione | ordine | status

    :adhone:
    Questo va bene, ma quello che poteva essere interessante era la struttura completa... cioe' il risultato della query

    SHOW CREATE TABLE tabella.

    Ma puoi vedere tu stesso se i campi sono NULL oppure NOT NULL, e se NOT NULL quale e' il default. Inoltre il formato degli stessi (VAR, INT ecc..)

    Tieni presente che i campi NULL non sono conteggiati da COUNT.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    CREATE TABLE `clienti` (
    `codice` int(11) NOT NULL auto_increment,
    `nome` varchar(40) default NULL,
    `indirizzo` varchar(60) default NULL,
    `cap` varchar(5) default NULL,
    `citta` varchar(30) default NULL,
    `provincia` char(2) default NULL,
    `telefono` varchar(20) default NULL,
    `email` varchar(40) default NULL,
    `username` varchar(20) default NULL,
    `password` varchar(20) default NULL,
    PRIMARY KEY (`codice`)
    ) TYPE=MyISAM


    CREATE TABLE `ordini` (
    `codice` int(11) NOT NULL auto_increment,
    `dataregistrazione` varchar(10) default NULL,
    `codcliente` int(11) NOT NULL default '0',
    `codvettore` int(3) default NULL,
    `spedizione` varchar(40) default NULL,
    `ordine` float(5,2) NOT NULL default '0.00',
    `status` tinyint(3) unsigned NOT NULL default '1',
    PRIMARY KEY (`codice`),
    ) TYPE=MyISAM

    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

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.