Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208

    [MySQL] SELECT elenco date al prezzo migliore

    chiedo scusa ma non sapevo come titolare il thread.

    ho una tabella composta:

    id - data - - - - - - prezzo

    1 - 2006-08-10 - - 10.50
    2 - 2006-08-12 - - 10.50
    3 - 2006-08-14 - - 10.50
    4 - 2006-08-10 - - 20.50
    5 - 2006-08-12 - - 20.50
    6 - 2006-08-14 - - 20.50
    7 - 2006-08-10 - - 5.50
    8 - 2006-08-12 - - 5.50
    9 - 2006-08-14 - - 5.50

    quello che voglio ottenere l'elenco delle date al prezzo migliore am se faccio:

    Codice PHP:
    SELECT FROM  tabella GROUP BY  data ORDER BY prezzo ASC 
    ottengo:

    1 - 2006-08-10 - - 10.50
    2 - 2006-08-12 - - 10.50
    3 - 2006-08-14 - - 10.50

    come posso fare per ottenere i 3 record con il prezzo più basso?

  2. #2
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    il campo prezzo in che formato è? Se con ASC li ordina mettendo prima i 10, allora credo sia considerata stringa...prova usando un DECIMAL. Dovrebbe ordinarteli correttamente.

  3. #3
    codice:
    SELECT * 
    FROM 
    (select MIN(prezzo) as id1 from tabella
    group by data) as tab1
    left join tabella as tab2 ON tab1.id1 = tab2.prezzo
    devi avere una delle versioni di mysql che supporti le subquery.

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208
    Originariamente inviato da Il_Drugo
    il campo prezzo in che formato è? Se con ASC li ordina mettendo prima i 10, allora credo sia considerata stringa...prova usando un DECIMAL. Dovrebbe ordinarteli correttamente.
    il campo prezzo è già in formato decimal(8,2) tantè che se faccio:
    Codice PHP:
    SELECT FROM  tabella ORDER BY prezzo ASC 
    li ordina corretamente, non capisco perchè.

  5. #5
    Originariamente inviato da Mixio
    il campo prezzo è già in formato decimal(8,2) tantè che se faccio:
    Codice PHP:
    SELECT FROM  tabella ORDER BY prezzo ASC 
    li ordina corretamente, non capisco perchè.
    GROUP BY e DISTINCT prelevano il primo record che trovano fisicamente nella tabella che soddisfa la condizione richiesta (la data) poi scelgono il dato richiesto dal raggruppamento (prezzo) come se fosse un campo aggiuntivo.

    Ne abbiamo gia' parlato parecchie volte. In pratica prende i dati del primo record che trova e gli aggiunge in coda il campo raggruppato.

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208
    Originariamente inviato da piero.mac
    codice:
    SELECT * 
    FROM 
    (select MIN(prezzo) as id1 from tabella
    group by data) as tab1
    left join tabella as tab2 ON tab1.id1 = tab2.prezzo
    devi avere una delle versioni di mysql che supporti le subquery.
    ottengo questo:

    id1 - - id - - data - - - - -prezzo
    5.50 - 10 - 2006-08-10 - 5.50
    5.50 - 11 - 2006-08-12 - 5.50
    5.50 - 10 - 2006-08-10 - 5.50
    5.50 - 11 - 2006-08-12 - 5.50
    10.50 - 1 - 2006-08-10 - 10.50
    10.50 - 2 - 2006-08-12 - 10.50
    10.50 - 3 - 2006-08-14 - 10.50

    non so se ho spiegato bene quello che mi serve, io vorrei:

    1 - 2006-08-10 - - 5.50
    2 - 2006-08-12 - - 5.50
    3 - 2006-08-14 - - 5.50

  7. #7
    dico che hai sbagliato a copiare la query.


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

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208
    Originariamente inviato da piero.mac
    dico che hai sbagliato a copiare la query.

    scusa piero ho fatto copia e incolla su phpmyadmin, non capisco.
    La versione di mysql è la 5.0.19.
    :master:

  9. #9
    Originariamente inviato da Mixio
    scusa piero ho fatto copia e incolla su phpmyadmin, non capisco.
    La versione di mysql è la 5.0.19.
    :master:
    non fai il raggruppamento nella query annidata.
    codice:
    SELECT * 
    FROM 
    
    questa subquery ti estrae il valore minimo raggruppando per data e quindi ottieni
    tab1.id1 per ogni raggruppamento di date
    
    (select MIN(prezzo) as id1 from tabella
    group by data) as tab1
    
    il dato ottenuto viene usato per la join seguente:
    
    left join tabella as tab2 ON tab1.id1 = tab2.prezzo
    a meno che la data sia in realta' un datetime ..... cioe' contenga l'ora

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208
    Originariamente inviato da piero.mac
    non fai il raggruppamento nella query annidata.
    codice:
    SELECT * 
    FROM 
    
    questa subquery ti estrae il valore minimo raggruppando per data e quindi ottieni
    tab1.id1 per ogni raggruppamento di date
    
    (select MIN(prezzo) as id1 from tabella
    group by data) as tab1
    
    il dato ottenuto viene usato per la join seguente:
    
    left join tabella as tab2 ON tab1.id1 = tab2.prezzo
    a meno che la data sia in realta' un datetime ..... cioe' contenga l'ora
    no la data è in formato date.

    Comunque non so perchè ma la query continua a non farmi il GROUP delle date, però analizzando bene la query ho provato a fare questo:

    Codice PHP:
    SELECT tabella. * , MINprezzo ) AS id1
    FROM tabella
    GROUP BY DATA 
    e sembra funzionare

    correggimi se sbaglio.

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.