Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131

    [mysql] E' possibile con una query selezionare i campi la cui somma sia uguale a...?

    Scusate per il titolo lunghetto...
    Ho l'esigenza di selezionare all'interno di una tabella, solo i record la cui somma dei prezzi sia entro un certo limite.
    Ad esempio, voglio selezionare automaticamente i 2 prodotti della categoria prova che costino entro e il più possibile vicino a 100 (e per questo gli ordino by prezzo desc )

    codice:
    SELECT *, sum(prezzo) as totale FROM `prodotti` WHERE totale<=100  and categoria='prova' group by prezzo order by prezzo desc limit 0,2
    ...la precedente query mi restituisce errore di mysql perchè evedentemente non può ordinare ancora per il campo totale creato nella query...
    Posso risolvere la cosa in una sola query, o devo per forza tramite php eseguire con un ciclo la query finchè il risultato non soddisfa i le mie esigenze?
    under costrussion

  2. #2
    l'alias "totale" lo puoi usare nella condizione HAVING che segue GROUP BY. Gli alias dei campi non sono ammessi nel where, perche' il where viene risolto subito dopo il nome della tabella e "prima" dei campi, quindi al momento della risoluzione del WHERE ancora non esiste l'alias del campo, mentre per esempio gia' esiste quello della tabella.


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

  3. #3
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    Grande, cavolo, l'avevo pure già usata! :rollo:
    Grazie mille!
    under costrussion

  4. #4
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    Niente, pensavo di esserci riusito ma invece la query mi restituisce valori sbagliati...
    Perchè se raggruppo i risultati per l'id del prodotto o per il prezzo mi calcola male il totale,se raggruppo per categoria mi restituisce una query vuota
    codice:
    SELECT *, sum(prezzo) as totale FROM `prodotti` WHERE categoria='prova'  group by prezzo having totale<=100
    under costrussion

  5. #5
    Ma non puoi raggruppare per prezzo quando questo e' gia' parte di un calcolo. Devi raggruppare per un valore che sia distintivo del risultato che vuoi ottenere..

    analizza:

    WHERE categoria='prova'

    hai gia' fatto la tua scelta. Il group by gli fara' 'na pippa. O meglio raggruppera' per ogni prezzo trovato nella categoria 'prova'. E la cosa sarebbe con poco senso.

    dovresti provare senza where, raggruppare per categoria con having il totale desiderato.

    Se invece nella categoria tu avessi una sottocategoria chiamiamola 'pippo' ecco che allora avrebbe senso fare il where:
    codice:
    ...
    sum(prezzo) as tot 
    ...
    WHERE categoria = 'prova'
    GROUP BY pippo
    having tot <= 100


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

  6. #6
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    devo ricavare l'id di 3 prodotti della categoria acqua che non costino ,sommati, più di 100...
    potrei raggruppare per la categoria acqua ma il totale non lo calcola cmq mai in modo esatto..
    under costrussion

  7. #7
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    cioè come dici te mi calcola la somma di tutti i prodotti acqa...
    under costrussion

  8. #8
    Originariamente inviato da marmo79
    devo ricavare l'id di 3 prodotti della categoria acqua che non costino ,sommati, più di 100...
    potrei raggruppare per la categoria acqua ma il totale non lo calcola cmq mai in modo esatto..
    qui stai andando nel complicato....

    categoria = acqua
    3 prodotti che sommati siano inferiori a 100 come valore....

    Non e' roba per mysql... se non sei in condizione di dire "quali" prodotti. I dati possono essere prelevati una sola volta per query.

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

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 © 2024 vBulletin Solutions, Inc. All rights reserved.