• Super User

    Ordinare per prezzo i dati che provengono da 2 tabelle

    Buongiorno

    ho 3 tabelle:

    • offerte
    • voli
    • impostazioni (dove tra le varie cose imposto una commissione generale in percentuale, e quindi il nostro guadagno)

    Nella tabella offerte inserisco il prezzo dell'hotel più tutto quello che è incluso ed ho un campo "commissione_manuale" dove inserisco una commissione manuale in percentuale (per esempio quella determinata offerta non voglio che abbia la commissione generale, supponiamo 20%, ma abbia solo il 5%)
    Nella tabella voli inserisco il prezzo del volo più tutte le informazioni

    Quando estraggo i dati e faccio la query che mostra il prezzo del pacchetto (prezzo_hotel + costo_volo per la commissione), al momento ordino per "prezzo_hotel" e quindi se un pacchetto ha un totale inferiore visto che la commissione è inferiore non viene ordinato in modo crescente ma ordina per il prezzo dell'hotel

    In che modo potrei memorizzare il prezzo totale del pacchetto e poi ordinare proprio per "totale_pacchetto"?

    Spero di essere stato abbastanza chiaro
    Grazie


  • User Attivo

    Ciao,

    questo è un quesito relativo ai database e non al PHP.

    Comunque, le tabelle offerte e voli immagino siano collegate tra loro.

    Quando fai la JOIN per estrarre i prezzi e fare i pacchetti, puoi fare così

    
    SELECT (o.prezzo + v.prezzo) as pacchetto
    FROM offerte o
    JOIN voli v
    ON o.id_volo = v.id
    ORDER BY pacchetto
    

    Do' per scontato che ci sia una chiave esterna che colleghi le tabelle offerte e voli.


  • Super User

    ciao
    si in effetti è relativo al database, ma l'ho messo qui perche' pensavo fosse il codice php a dover essere aggiustato...

    In ogni caso, in questa pagina non utilizzo join, ma seleziono prima i voli, poi l'offerta e poi le "collego", stessa cosa per la commissione.
    Per questo non capisco se posso "memorizzare" da qualche parte il prezzo e poi ordinarlo meglio


  • User Attivo

    Ciao,

    non sapendo come hai sviluppato il codice non saprei dirti, sicuramente se hai fatto bene il DB puoi ordinare direttamente con la query, altrimenti potresti farlo da PHP con le funzioni di ordinamento sort() asort(), etc... che ordinano gli elementi di un array rispettivamente con indice numerico o di tipo stringa.


  • Super User

    ma come potrei salvare il risultato in un array e poi ordinarlo?


  • User Attivo

    Cosa usi per l'acceso ai dati del DB?

    Se usi PDO, ad ogni query ti ritorna un'oggetto o un array a seconda del parametro utilizzato nella funzione fetch(). Guarda qui https://www.php.net/manual/en/pdostatement.fetch.php#refsect1-pdostatement.fetch-parameters

    PDO::FETCH_ASSOC ti ritorna un array di array associativi

    Es. considera il seguente esempio di array

    [PHP]
    Array
    (
    [0] => Array
    (
    [id] => 9
    [prezzo] => 150
    )
    [1] => Array
    (
    [id] => 10
    [prezzo] => 300
    )
    [2] => Array
    (
    [id] => 11
    [prezzo] => 250
    )
    )
    [/PHP]

    In PHP puoi scrivere

    [PHP]
    $record = array di array contenente i dati ritornati dal DB
    $record = array_column($record, 'prezzo', 'id'); // ottengo un array associativo con chiave uguale al campo id e valore uguale al campo prezzo
    asort($created_at); // ordino l'array per prezzo
    [/PHP]

    Se invece colleghi le due tabelle offerte e voli con una chiave esterna, puoi ordinare direttamente nella query. Io ti consiglio questa seconda soluzione, in quanto gli ordinamenti andrebbero fatti sempre a livello di database.