Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    60

    [MySQL] ordinamento per prezzo da due tabelle correlate

    Saluti a tutti quanti, espongo il problema:

    ho la seguente tabella articoli

    codice:
    CREATE TABLE _articoli (
      id int(11) NOT NULL auto_increment,
      titolo varchar(255) default NULL,
      prezzo decimal(10,2) default NULL,
      PRIMARY KEY  (id)
    );
    e la tabella correlata offerte

    codice:
    CREATE TABLE _offerte (
      id int(11) NOT NULL auto_increment,
      id_articolo int(11) default NULL,
      data_inizio date default NULL,
      data_fine date default NULL,
      prezzo_offerta decimal(10,2) default NULL,
      PRIMARY KEY  (id)
    );
    vorrei ordinare gli articoli per prezzo ascendente (o descendente....) considerando anche l'eventuale prezzo in offerta qualora fosse attivo (determinabile tramite clausola WHERE data_inizio<='$oggi' AND data_fine>='$oggi'.

    ulteriore appunto, non sempre l'offerta esiste oppure è valida.

    pensavo pertanto di ottenere come risultato della query un tracciato del tipo

    id, prezzo_applicato

    dove prezzo_applicato è il prezzo più basso tra il prezzo di listino e l'eventuale prezzo_offerta (solo se, come detto, l'offerta è "attiva").

    avete suggerimenti da darmi in proposito? io speravo che una generica query come quella sotto potesse funzionare, ma ovviamente mi sbagliavo

    SELECT
    `_articoli`.id,
    `_articoli`.prezzo,
    `_offerte`.prezzo_offerta,
    `_articoli`.titolo,
    MIN(`_articoli`.prezzo, `_offerte`.prezzo_offerta ) as prezzo_applicato
    FROM
    `_offerte`
    INNER JOIN `_articoli` ON (`_offerte`.id_articolo = `_articoli`.id)
    WHERE
    (`_offerte`.data_inizio <= '2010-03-23') AND (`_offerte`.data_fine >= '2010-03-23')

    ringrazio chiunque possa darmi una mano!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select a.id,a.titolo,a.prezzo,o.prezzo_offerta,
    if(o.prezzo_offerta is null,a.prezzo,o.prezzo_offerta) as prezzo_applicato
    from _articoli as a
    left join _offerte as o 
    on a.id = o.id_articolo and curdate() between o.data_inizio and o.data_fine
    order by prezzo_applicato desc

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    60
    funziona perfettamente, grazie mille!

    unico appunto: volessi aggiungere una clausola

    WHERE a.id_sottocategoria='x'

    come cambierebbe la query?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Evviva lo spirito d'iniziativa.

    codice:
    select 
    a.id,
    a.titolo,
    if(o.prezzo_offerta is null,a.prezzo,o.prezzo_offerta) as prezzo_applicato
    from _articoli as a
    left join _offerte as o 
    on a.id = o.id_articolo and curdate() between o.data_inizio and o.data_fine
    where a.id_sottocategoria = x
    order by prezzo_applicato desc

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2000
    Messaggi
    60
    Originariamente inviato da nicola75ss
    Evviva lo spirito d'iniziativa.

    codice:
    select 
    a.id,
    a.titolo,
    if(o.prezzo_offerta is null,a.prezzo,o.prezzo_offerta) as prezzo_applicato
    from _articoli as a
    left join _offerte as o 
    on a.id = o.id_articolo and curdate() between o.data_inizio and o.data_fine
    where a.id_sottocategoria = x
    order by prezzo_applicato desc


    ma come è possibile, ho fatto preciso così e non mi funzionava, adesso si... che cosa ho sbagliato?

    scusami, credimi non è stato per mancanza di spirito d'iniziativa ma ho provato a piazzarla in diversi posti e non funzionava... non so che dire mi pento ma ti ringrazio di nuovo

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non c'è problema.

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