creo que tu problema es este:
Cita: Particularmente mi problema es con los campos moneda y precio, ya que en ellos se acumulan la moneda (puede estar en pesos o dolares) y en precio el valor. Luego con código php, armo una función que toma el valor del dolar de otra tabla y actualiza los productos que estén en dólares para poder mostrar todo el catálogo en pesos. Hasta aquí todo bien.
imagino que tienes dos tablas
tablaventa y tablamonedas
Si tú tienes en tablamonedas el campo valor en pesos o dólares
imagina:
tablamonedas
idtblmoneda, moneda, valorpeso
y en la tablaventas
idventa, producto, precio, moneda
Piensa que de esa manera puedes añadir otras monedas y también que los cambios serán dinámicos: bastará con cambiar el valorpeso del dólar o la moneda que sea para que se cambie todo el orden. Pero, ojo, esto puede alterar datos de interés, pues los cambios de moneda podrían alterar tu histórico. Quizás deberías crear un par de campos más para saber el cambio del momento y el precio final y guardarlo, y ordenar por ese dato almacenado. Yo lo preferiría. No obstante, si no necesitas nada de eso y es sólo para ordenar, te bastará con lo que te propongo:
en el campo moneda (que debaría ser INT) guardas el valor de idtblmoneda correspondiente, o incluso guardando el nombre de la moneda (en este caso VARCHAR; pero, cuidado con los nombres iguales con distintos valores: mejor un idtblmoneda), te resultará fácil ordenar como quieres con un sencillo producto
SELECT * FROM tablamonedas m INNER JOIN tablaventas v ON m.idtblmoneda = v.moneda ORDER BY v.precio * m.valorpeso DESC
Esta es la idea.