Les dejo el siguiente ejemplo con el que vengo trabajando un problema:
LA TABLA
Código PHP:
+------+---------+--------+---------+
| id | nombre | codigo | tamanio |
+------+---------+--------+---------+
| 1 | Pelota3 | 100 | 420 |
| 2 | Carpa1 | 200 | 445 |
| 3 | Pelota2 | 100 | 440 |
| 4 | Carpa2 | 200 | 340 |
| 5 | Carpa3 | 100 | 350 |
| 6 | Pelota4 | 100 | 380 |
+------+---------+--------+---------+
LA CONSULTA
Código PHP:
SELECT T1.* FROM tabla T1
INNER JOIN
(SELECT codigo, MIN(ABS(tamanio-400)) diferencia
FROM tabla GROUP BY codigo) T2 ON T1.codigo = T2.codigo AND ABS(T1.tamanio - 400) = T2.diferencia
ORDER BY codigo;
Con lo anterior obtengo el codigo de producto cuya diferencia entre el tamanio y el valor 400 (un parametro) es la menor, sin repetidos.
Bien ahora lo que nesecito es obtener Le codigo y la diferencia y el Id de los productos cuya resta de tamaños sea la menor
Lo que intente fue:
Código PHP:
SELECT T1.*, ABS(T1.tamanio - T2.Tamanio) as Diferencia
FROM tabla T1
INNER JOIN T2 ON T1.codigo = T2.codigo AND ABS(T1.tamanio - T2.Tamanio)<100
Group by T1.codigo
ORDER BY diferencia asc;
Pero lo que obtengo no es fiel, el id de producto que tengo es le menor con el el codigo correspondiente, en ves del acorde a la menor diferencia.
Como podria solucionarlo?
Gracias