• User

    Problema Query SQL

    ho un db in cui ho una tabella annunci e una tabella pubblicazioni

    1 annuncio può avere + pubblicazioni... e una pubblicazione ha una data di inizio pubblicazione e può essere approvata, scaduta, visibile ecc..

    ho un problema con una query con cui vorrei visualizzare tutte le ultime pubblicazioni di ogni annuncio con il relativo stato

    Per chiarire meglio... i dati presenti nella tabella sono come segue:

    [URL=http://img67.imageshack.us/my.php?image=datiap5.jpg]image

    cioè diversi annunci pubblicati + volte con date diverse e stati diversi
    il risultato finale che vorrei ottenere sarebbe
    la data + recente di ogni annuncio

    ex se ho:
    ann 1 - data pubbl 01/05 - stato visibile
    ann 1 - data pubbl 02/03 - stato archiviato
    ann 1 - data pubbl 05/06 - stato scaduto

    vorrei che la query ottenese come risultato di farmi vedere solo
    ann 1 - data pubbl 05/06 - stato scaduto (cioè quella con data + recente)

    pensavo di usare group by (annunci.id)... e max per la data di pubblicazione (pubblicazioni.data_inizio) ma non funziona.. raggruppa i record con lo stesso id annuncio... ma praticamente .... prende il primo...

    ann 1 - data pubbl 01/05 - stato visibile

    solo che gli mette come data pubbl l'ultima... in pratica, ho i dati della pubblicazione + vecchia.. con la data dell'ultima..

    ann 1 - data pubbl 05/06 - stato visibile - come si vede lo stato risulta sbagliato..dovrebbe essere "stato scaduto"

    ecco i risultati
    [URL=http://img486.imageshack.us/my.php?image=risuag3.jpg]image

    spero di essere stato abb chiaro...questo problema mi capita spesso e non so mai come risolverlo

    SELECT annunci.titolo , annunci.settore, annunci.id AS id_ann,
    categorie.id AS id_cat, categorie.nome_ita AS categoria, tipologie.id AS id_tip,
    tipologie.nome_ita AS tipologia, annunci.marca, annunci.modello, annunci.importo,
    pubblicazioni.id, pubblicazioni.stato, MAX(pubblicazioni.data_inizio)
    FROM (categorie INNER JOIN tipologie ON categorie.id=tipologie.id_categoria)
    INNER JOIN (annunci INNER JOIN pubblicazioni ON annunci.id=pubblicazioni.id_annuncio)
    ON tipologie.id=annunci.id_tipologia
    WHERE ( ((pubblicazioni.stato) LIKE '%' ) AND ((annunci.id_utente)=3)) GROUP BY annunci.id
    ORDER BY tipologie.id, pubblicazioni.data_inizio DESC, annunci.marca, annunci.modello LIMIT 0,20


  • User

    forse... e dico forse... così ho risolto

    SELECT *
    FROM (
    SELECT annunci.titolo , annunci.settore, annunci.id AS id_ann, pubblicazioni.id AS id_pubb, categorie.id AS id_cat,
    categorie.nome_ita AS categoria, tipologie.id AS id_tip, tipologie.nome_ita AS tipologia, annunci.marca,
    annunci.modello, annunci.importo, pubblicazioni.stato
    FROM (categorie INNER JOIN tipologie ON categorie.id=tipologie.id_categoria)
    INNER JOIN (annunci INNER JOIN pubblicazioni ON annunci.id=pubblicazioni.id_annuncio)
    ON tipologie.id=annunci.id_tipologia
    WHERE ( ((pubblicazioni.stato) LIKE '%' ) AND ((annunci.id_utente)=3))
    ) AS primatb

    INNER JOIN

    (SELECT MAX(pubblicazioni.data_inizio) As data_inizio, MAX(pubblicazioni.id) As id, pubblicazioni.id_annuncio
    FROM pubblicazioni
    GROUP BY pubblicazioni.id_annuncio) AS tmptb

    ON primatb.id_pubb=tmptb.id

    ORDER BY primatb.id_tip, tmptb.data_inizio DESC, primatb.marca, primatb.modello
    LIMIT 0,20