Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Help query vini

  1. #1

    Help query vini

    Ciao, sto creando per un progetto un negozio di vini online.
    Ho due tabelle:
    VINO (
    Nome_Vino CHAR(50) NOT NULL,
    Annata NUMERIC(4) NOT NULL,
    Descrizione CHAR(200) NOT NULL,
    Categoria CHAR(20) NOT NULL,
    PRIMARY KEY (Nome_Vino);
    Inventario (
    Quantita INT NOT NULL,
    Data_aggiunta DATE NOT NULL,
    Nome_Vino CHAR(50) NULL,
    Prezzo FLOAT NOT NULL,
    PRIMARY KEY (Data_aggiunta,Prezzo)
    FOREIGN KEY (Nome_Vino) REFERENCES Vino (Nome_Vino);
    In vino ho tutti i vini esistenti, nell'inventario solo i vini disponibili per l'acquisto e quindi quelli visualizzati nel catalogo per essere acquistati dall'utente.
    Quello che voglio è che l'utente abbia sempre segnalato sul sito il miglior prezzo di inventario disponibile per ogni vino selezionato, cioè se ci sono due vini uguali nell'inventario ma con prezzi diversi, io devo visualizzare quello con prezzo migliore e l'altro non mostrarlo.
    Non so proprio come fare . Help please

  2. #2
    prova cosi':

    select a.Nome_Vino, a.descrizione, a.annata, min(prezzo) from vino a join inventario b on b.nome_vino = a.nome_vino
    group by Nome_Vino

    nei casi dove nel prezzo non ti restituisce nulla (o meglio null) significa che il vino e' nella tabella vino ma non in inventario

  3. #3
    Sei un grande, funziona! grazie mille!
    Solo una cosa non capisco,
    codice:
    $res = mysql_query(' 
    SELECT a.Nome_Vino, a.Descrizione, a.Annata, a.Categoria, a.Nome_Cantina,min(Prezzo) as Prezzo 
    FROM vino a join inventario b 
    ON b.nome_vino = a.nome_vino 
    GROUP BY Nome_Vino') 
    OR DIE(mysql_error());
     $result[] = '
    1. '; $i=0; while ( $f = mysql_fetch_array($res)) { $result[] = '
    2. "'.$f['Nome_Vino']. '" Anno: '.$f['Annata']. ' Categoria: '.$f['Categoria'].' Cantina: '.$f['Nome_Cantina'].' '.$f['Descrizione'].' Prezzo: '.$f['Prezzo'].' € Aggiungi al carrello.'; $i++; } $result[] = '
    '; echo @join('',$result);
    mi stampa come prezzo
    "Chianti" Anno: 2009 Categoria: Rosso Cantina: Gentili
    Profumi classici di ciliegia e prugna matura
    Prezzo: 4.599999904632568 €

    e il prezzo sarebe 4.5....cosa sono tutti sti numeri??

  4. #4
    prezzo e' stato dichiarato sulla tabella come float, quindi ti fa vedere una serie di decimali anche se inutilizzati.
    dovresti leggerlo sulla select trattando il campo cosi':
    select min(ROUND(prezzo, 1)) as Prezzo from ....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    non funziona.

    con mysql usa direttamente un campo tipo DECIMAL(15,2)

  6. #6
    ha funzionato con ROUND()! Grazie mille!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    round non funziona, si limita a "mascherare" il problema (curare il sintomo), non a "risolvere il problema".

    Per memorizzare importi CURRENCY il campo "giusto" per mysql è DECIMAL(lunghezza massima,numero decimali)

  8. #8
    Ah ok scusa non avevo capito. Però quando faccio una select * direttamente dal prompt di amministrazione del db mysql mi stampa giusto come l'ho inserito e non tutti quei numerini...dici che lo aggiusta in automatico?

  9. #9
    penso che il problema che ti dice franzauker non sia come fai la select (la select non cambia la tua base dati) ma come hai dichiarato il campo quando hai creato la tabella (hai dichiarato il campo prezzo di tipo float e non di tipo decimal)

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.