- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema Query SQL
-
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]
cioè diversi annunci pubblicati + volte con date diverse e stati diversi
il risultato finale che vorrei ottenere sarebbe
la data + recente di ogni annuncioex 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 scadutovorrei 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]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
-
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 primatbINNER 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 tmptbON primatb.id_pubb=tmptb.id
ORDER BY primatb.id_tip, tmptb.data_inizio DESC, primatb.marca, primatb.modello
LIMIT 0,20