Carmen ha scritto:
io avevo provato così e mi funziona. L'unico problema che non mi torna l'id (contatore) corrispondente ai valori estratti
allora prova così, effettuando delle join della tabella prodotti con sé stessa, ma fai attenzione alle sue prestazioni. Ha una subquery e svariate join, se hai molte migliaia di prodotti potrebbe diventare molto lenta. Assicurati di avere degli indici sulle colonne codart, prezzo1, prezzo2 e prezzo3.
SELECT minimi.*, p1.id as id1, p2.id as id2, p3.id as id3 FROM (SELECT codart, min(prezzo1) AS minprezzo1, min(prezzo2) AS minprezzo2, min(prezzo3) AS minprezzo3 FROM prodotti WHERE disponibile>0 GROUP BY codart) as minimi LEFT JOIN prodotti as p1 ON (minimi.minprezzo1=p1.prezzo1 AND minimi.codart=p1.codart) LEFT JOIN prodotti as p2 ON (minimi.minprezzo2=p2.prezzo2 AND minimi.codart=p2.codart) LEFT JOIN prodotti as p3 ON (minimi.minprezzo3=p3.prezzo3 AND minimi.codart=p3.codart) GROUP BY minimi.codart
E comunque mi sono accorto che le query che ti avevo consigliato ieri non funzionano. Infatti l'ID restituito non era necessariamente quello del record che porta il valore minimo, ma quello del primo record di ogni gruppo. Resto dell'opinione che sia meglio dividere il problema in 3 parti e poi ricomporre i risultati. Sul sito di MySql ho trovato questo articolo:
http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.htmlNel
commento di Kasey Speakman trovi una soluzione da provare come alternativa alla prima query, se dovesse risultare troppo lenta.
SELECT * FROM (SELECT Id, codart, prezzo1 as prezzo FROM prodotti WHERE disponibile>0 ORDER BY prezzo1) AS p GROUP BY codart;
Questa restituisce i minimi per prezzo1 ma puoi ripeterla per prezzo2 e prezzo3 e poi unire i risultati di ciascuna.
ciao,
Modificato da BrightSoul il 18 ottobre 2011 21.03 -