PDA

View Full Version : Query SQL


pbg4
31-08-2006, 12:38
Ciao a tutti. Spiego subito il problema. Devo ricavare una lista di prodotti da una tabella che hanno queste caratteristiche: appartengono a categorie diverse e tra quelli della stessa categoria, hanno la data di inserimento maggiore.
In soldoni, mi serve per ogni categoria di prodotti, il prodotto inserito più di recente.

la tabella in questione ha come campi interessati:

- id_prodotto
- id_categoria
- data_inserimento
- nome
- ecc. ecc.

Sto provando con query composte, ma non ottengo una lista bensì un solo valore.
Sto cercando di risolvere il problema con una singola query visto che nella pagina php che deve gestire questi dati sono già presenti 5 query che si attivano al load della pagina. Non vorrei appesantire troppo il tutto...

Che mi potete dare un aiuto?
Grazie

pbg4

Mavel
31-08-2006, 12:59
Ordina per categoria e poi per data discendente:
ORDER BY id_categoria, data DESC

pbg4
31-08-2006, 14:40
Ordina per categoria e poi per data discendente:
ORDER BY id_categoria, data DESC
Ma così ottendo i prodotti per categoria ordinati per data, io invece cerco l'ultimo prodotto inserito di ogni categoria...
mi sto :mc: e sono di fronte a :muro:
:help: :cry:

mailand
31-08-2006, 15:03
secondo me questa potrebbe fungere...

select id_prodotto,
id_categoria,
nome,
max(data_inserimento)
from tabella
order by id_categoria

Mixmar
31-08-2006, 21:56
Penso che si potrebbe risolvere con un GROUP BY:


SELECT ID_PRODOTTO, NOME, DATA_INSERIMENTO
FROM PRODOTTI JOIN
(SELECT ID_CATEGORIA, MAX(DATA_INSERIMENTO)
FROM PRODOTTI
GROUP BY ID_CATEGORIA) AS T
ON ID_CATEGORIA=T.ID_CATEGORIA AND DATA_INSERIMENTO=T.DATA_INSERIMENTO


Però questo codice funziona SOLO se non esistono due prodotti inseriti nella stessa categoria con la stessa DATA_INSERIMENTO... non è il massimo... :confused:

Questo è un po' migliore, l'ho costruito prendendo spunto da mainland:


SELECT ID_PRODOTTO, ID_CATEGORIA, NOME, DATA_INSERIMENTO
FROM PRODOTTI AS A JOIN
(SELECT ID_PRODOTTO, ID_CATEGORIA, MAX(DATA_INSERIMENTO)
FROM PRODOTTI) AS B
ON A.ID_CATEGORIA=B.ID_CATEGORIA AND
DATA_INSERIMENTO=B.DATA_INSERIMENTO AND
A.ID_PRODOTTO=B.ID_PRODOTTO


Questo non elimina eventuali "doppioni" (o... "triploni" ;) ), però non richiede che ID_CATEGORIA + DATA_INSERIMENTO siano chiave univoca.