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.
resta sempre che il valore zero va escluso
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?