Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Originariamente inviato da Mixio
    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.
    Non funziona in modo certo.

    ti estrae si il prezzo minimo, ma i dati delle altre colonne non sono quelli presenti in quel record, cioe' potrebbero anche esserlo, ma in modo casuale, dipendente dalla posizione fisica del record nella tabella.

    Se ti serve solo data (raggruppata percio' identica) e prezzo minimo allora va bene. Se ti servono altri dati (presumo dal select *) allora no.

    Ci sono tre modi per ottenere quello che cerchi se vuoi tutta la tupla relativa:

    tabella temporanea, subquery, ordinamento DESC con alter table su "prezzo" indicizzato.

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

  2. #12
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208
    Originariamente inviato da piero.mac
    Non funziona in modo certo.

    ti estrae si il prezzo minimo, ma i dati delle altre colonne non sono quelli presenti in quel record, cioe' potrebbero anche esserlo, ma in modo casuale, dipendente dalla posizione fisica del record nella tabella.
    VVoVe:

    Se ti serve solo data (raggruppata percio' identica) e prezzo minimo allora va bene. Se ti servono altri dati (presumo dal select *) allora no.
    in pratica avendo altri campi e per giunta relazionati con altre tabelle, mi stai dicendo che non è per niente affidabile.

  3. #13
    Originariamente inviato da Mixio

    in pratica avendo altri campi e per giunta relazionati con altre tabelle, mi stai dicendo che non è per niente affidabile.
    Affidabile non e' il termine corretto e' errato il modo. Una tupla estratta deve avere un valore certo e non un valore casuale. Ripetiamo ... quando scrivi:

    SELECT *, min(prezzo) .... GROUP by data

    il motore di ricerca seleziona "raggruppando" in una tabella temporanea tutte le tuple che corrispondono allo stesso valore in data. Su queste tuple esegue la ricerca del min() sul campo prezzo. A questo punto prende "LA PRIMA" tupla che trova nella tabella temporanea, aggiunge un campo min() e la presenta nel result set. Poi ripete con gli altri raggruppamenti.

    ORDER BY agisce sul result set e non sulla tabella originale.

    Un modo apparentemente complicato sarebbe quello di costruire tu una tabella temporanea al posto di quella costruita motu proprii da mysql. Qualcuno e' contrario alle tabelle temporanee e punta a queries apocalittiche, Io sono per la maggior semplicita' possibile, anche perche' la tab temporanea e' usatissima dal server e non capisco perche' non dovrei usarla pure io.

    Vediamo un esempio con la tabella temporanea:

    codice:
    CREATE TEMPORARY TABLE temp
    SELECT * FROM tabella
    ORDER BY prezzo ASC;
    
    SELECT *
    FROM temp
    GROUP BY data
    ORDER BY data;
    Se la provi con phpmyadmin devi mettere entrambe le queries nella stessa finestra perche' il programma chiude la connessione ad ogni query (come fanno tutte le pagine php d'altronde)

    E non usare il db se hai paura di fare una query in piu'. A volte velocizzi con una query in piu'.

    Da notare che se esegui query complesse con altre tabelle puoi usare la tabella temporanea al posto della originale, ovviamente. QUesto modo e' compatibile anche con vecchie versioni di mysql tra l'altro.

    Mi pare pero' strano che non funzioni il group by nella select annidata detta prima.

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

  4. #14
    Utente di HTML.it L'avatar di aserena
    Registrato dal
    Feb 2003
    Messaggi
    310
    La query di Piero è giusta, giusto un ritocchino...

    codice:
    SELECT DISTINCT  data, prezzo
    FROM 
    (select prezzo as id1 from tabella
    group by data) as tab1
    left join tabella as tab2 ON tab1.id1 = tab2.prezzo order by id1 limit 0,3
    In codesto modo ti seleziona le date + vecchie con i prezzi + bassi..
    La (!) è quella roba che in autunno si intristisce... perche': seccano i piselli, migrano gli uccelli, cadono i marroni, e se poi c'è anche la nebbia non si vede più un caXXo!! by Piero.mac @07/05

  5. #15
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    208
    CREATE TEMPORARY TABLE temp
    SELECT * FROM tabella
    ORDER BY prezzo DESC;

    SELECT *
    FROM temp
    GROUP BY data
    ORDER BY data;
    favoloso!! Grazie!

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.