Ciao a tutti,
come posso fare una select così:
selezionare il record con il valore più basso tra campo1,campo2,campo3,campo4,campo5 che sia diverso da 0.00
Fatemi sapere.
Grazie mille.
Ciao a tutti,
come posso fare una select così:
selezionare il record con il valore più basso tra campo1,campo2,campo3,campo4,campo5 che sia diverso da 0.00
Fatemi sapere.
Grazie mille.
Prova cosi :
Tabella num - campi => id,n1,n2,n3,n4,n5
Codice PHP:
select T1.id, min(T2.n) from num T1
INNER JOIN
(SELECT id,n1 AS n
FROM `num`
WHERE n1 <> 0
UNION
SELECT id,n2 AS n
FROM `num`
WHERE n2 <> 0
UNION
SELECT id,n3 AS n
FROM `num`
WHERE n3 <> 0
UNION
SELECT id,n4 AS n
FROM `num`
WHERE n4 <> 0
UNION
SELECT id,n5 AS n
FROM `num`
WHERE n5 <> 0) AS T2 on T1.id = T2.id
GROUP BY T1.id
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
Io userei un LEAST ed un approccio BigM
Non mi è chiarissimo se ogni campo-k deve essere diverso da zero, oppure se deve esserlo il minimo.
Se ho interpretato bene...
Vabbè faccio fatica a scrivere la query.codice:select * from tabella order by least(if(campo1=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo1),if(campo2=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo2),if(campo3=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo3),if(campo4=0, greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo4),if(campo5=0,greatest(max(campo1),max(campo2),max(campo3),max(campo4),max(campo5))+1,campo5)) limit 1
Comunque la logica è: dato un BigM, che puoi fissare a mano (es. 1000000) se puoi, oppure che puoi
calcolare come greatest(max(campo1),...max(campon))+1, testi se zero, nel qual caso torni bigm, oppure il campo.
Fai il least, ordina su questo campo, limit 1 e prendi il minimo
Ultima modifica di MySQL; 08-05-2015 a 21:58
Non avevo letto tutto. Comunque.
Codice PHP:
select * FROM num as T0
INNER JOIN (
SELECT T1.id, min(T2.n) AS minimo FROM num T1
INNER JOIN (
SELECT id,n1 AS n FROM `num` WHERE n1 <> 0 UNION
SELECT id,n2 AS n FROM `num` WHERE n2 <> 0 UNION
SELECT id,n3 AS n FROM `num` WHERE n3 <> 0 UNION
SELECT id,n4 AS n FROM `num` WHERE n4 <> 0 UNION
SELECT id,n5 AS n FROM `num` WHERE n5 <> 0
) AS T2 on T1.id = T2.id
GROUP BY T1.id
) AS T3 on T0.id = T3.id
HAVING min(T3.minimo)
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
Potresti spiegarmi un po la query?
Faccio alcuni esempi e modifico qualcosa indicato sopra:
ESEMPIO1:
Record id 1 ita:
prezzo1 = 100
prezzo2 = 200
Record id 1 ing:
prezzo1 = 50
prezzo2 = 400
Record id 2 ita:
prezzo1 = 80
prezzo2 = 200
Record id 2 ing:
prezzo1 = 0
prezzo2 = 400
In questo caso deve prendere record id 1 lingua ing (perchè prezzo1 è il più basso perchè va escluso prezzo 0).
ESEMPIO2:
Record id 1 ita:
prezzo1 = 0
prezzo2 = 20
Record id 1 ing:
prezzo1 = 150
prezzo2 = 300
Record id 2 ita:
prezzo1 = 80
prezzo2 = 200
Record id 2 ing:
prezzo1 = 0
prezzo2 = 400
In questo caso deve prendere record id 1 lingua ita (perchè prezzo2 è il più basso perchè va escluso prezzo 0).
Quindi praticamente deve prendere il prezzo più basso tra i vari record controllando tra i campi prezzo1 e prezzo2.
Volendo, per semplificare, potrebbe anche bastarmi un controllo solo sul campo prezzo1.
Però ho prezzo1ita e prezzo1ing (che realmente sono 5..ita, ing,spa,ted e fra... ma per l'esempio ovviamente mi bastano 2 lingue).
Quindi rispetto all'esempio di sopra si elimina il controllo su prezzo2... praticamente torniamo alla versione iniziale.
Io faccio tutto in ASP... possiamo rivedere la query?
resta sempre che il valore zero va escluso