Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Problema MySQL
Autor Mensaje
kseba Sin conexión
Profesor del Modulo A
Sin estado :(
*****

Ing. en Sistemas


Mensajes: 279
Agradecimientos dados: 1
Agradecimientos: 0 en 0 posts
Registro en: May 2008
Mensaje: #1
Problema MySQL
Estoy haciendo un sitio para una red inmobiliaria. Hay una tabla con el listado de propiedades y hay que realizar diferentes busquedas sobre el mismo.

El problema es cuando tengo que ordenar los resultados por precio, porque algunos precios estan en pesos y otros en dolares. Entonces tendria que multiplicar por $valor_dolar los precios en dolares para generar el ordenamiento.

La tabla simplificada seria algo asi:
ID_Propiedad: int
Moneda: char ("d" = dolar, "p" = pesos)
Precio: int

Es decir, al momento de hacer la consulta tengo que multiplicar "Precio" por $valor_dolar solo si Moneda = "d" y que el ordenamiento se realice segun esos nuevos valores.

Se puede hacer esto directamente en la consulta y que ya me de el resultado ordenado o tengo que cargar toda la info en un array y ordenarla recien ahi desde el codigo?

Gracias y saludos!
29-03-2011 20:22
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.852
Agradecimientos dados: 55
Agradecimientos: 195 en 50 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #2
RE: Problema MySQL
¿en qué lenguaje estás programando? si usás objetos debería ser todo más simple, es sencillo lo que querés hacer.

tendrías que armar un objeto "aviso" que tenga el precio y la moneda. ese objeto sabe responder los mensajes "precio" y "precio en pesos". ese método se encarga de la lógica, y se fija si tiene moneda "p" devuelve lo mismo que "precio" y sino devuelve precio por la cotización. entonces al momento de ordenar lo hacés por "precio en pesos".
esto a su vez te permite tener otro método que sea "precio en dólares" y que haga lo mismo, pero al revés. por si algún extranjero está buscando depto y quiere ver los precios en una moneda que le resulte familiar para hacerse una idea.

también tenés que tener en cuenta que la cotización va cambiando día a día, así que deberías mantener un histórico, o al menos la cotización del día. se supone que ese valor es estimado, y que no varía durante todo el día, así que no hace falta que se consulte constantemente a la base, sino que lo metés como una variable global (o en el session, si usás php, creo). ¿se entiende?

en fin, si me copo escribiendo no termino más. laburo desarrollando sistemas financieros, así que algo de ésto creo que sé, jaja.

pero no tenés que resolver nada por base. que la base sirva nomás para guardar datos. todo lo demás hacelo en el modelo.

29-03-2011 20:35
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
kseba Sin conexión
Profesor del Modulo A
Sin estado :(
*****

Ing. en Sistemas


Mensajes: 279
Agradecimientos dados: 1
Agradecimientos: 0 en 0 posts
Registro en: May 2008
Mensaje: #3
RE: Problema MySQL
Gracias!
Estoy haciendolo en php, pero no estoy usando objetos.
Mi idea era hacer la consulta espeficando que queria que lo ordene por "precio ASC" pero si "moneda" = "d" entonces precio*4
(El literal 4 es el valor de una variable $valor_dolar, que obvio se va actualizando con la cotizacion).
Es decir, que el motor de base de datos se encargue de ordenarlo. Asi hice siempre con cualquier laburo, el tema es que esta vez necesito que opere antes si se cumple una condicion.

Tenes idea si se puede hacer eso?
Gracias de nuevo, saludos!
Bueno, dando mil vueltas y leyendo cosas que no entendi pude hacer algo.
Lo posteo por si alguna vez alguien tiene un problema similar:

SELECT if(Moneda="d",precio*4, precio) as precio FROM propiedades ORDER BY precio ASC

Lo que dice es que devuelva los valores de la columna precio (obviamente yo le voy a pedir que me devuelva todas las columnas, aca es solo para simplificar) si Moneda="d" entonces asigna a "precio" (lo dice con "as precio") el valor precio*4, sino el valor "precio".

Gracias igual LeaTex, Saludos!
(Este mensaje fue modificado por última vez en: 29-03-2011 21:28 por kseba.)
29-03-2011 21:14
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.762
Agradecimientos dados: 136
Agradecimientos: 381 en 132 posts
Registro en: May 2008
Mensaje: #4
RE: Problema MySQL
justo te iba a decir que uses CASE.
29-03-2011 22:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
gonnza Sin conexión
User Verde

*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 17.112
Agradecimientos dados: 763
Agradecimientos: 732 en 317 posts
Registro en: Mar 2010
BlogSpot Google+ YouTube
Mensaje: #5
RE: Problema MySQL
(29-03-2011 22:37)brunodiaz escribió:  justo te iba a decir que uses CASE.

lo mismo =(
una vez que puedo responder una duda de desarrollo, me iba a sentir groso (?)

[Imagen: v34BEFt.gif]
30-03-2011 00:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.852
Agradecimientos dados: 55
Agradecimientos: 195 en 50 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #6
RE: Problema MySQL
está bien, ahora digo, ¿por qué no hacés eso en php?
sin usar objetos, en estructurado también podés hacerlo. a lo mejor se te complica ordenar el array, pero podés. de todos modos ese select lo estás armando dinámicamente para meterle el valor de la variable valor_dolar.
así si mañana querés meter avisos en euros, yenes y lo que sea, no tenés que armar un select monstruoso con un case o 200 if anidados. ¿se entiende?

pero bueno, esa sería una alternativa viable, obvio.

30-03-2011 00:36
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.646
Agradecimientos dados: 0
Agradecimientos: 7 en 7 posts
Registro en: Apr 2008
Mensaje: #7
RE: Problema MySQL
SELECT id_propiedad,
(CASE WHEN moneda = 'p' THEN precio ELSE precio * 4 END) AS valor_pesos
FROM tabla;

(quizás puede haber algun pifie de sintaxis, pero la idea es esa).

El tema es que el valor del dolar puede variar. Lo que se puede hacer es tener una tabla de cotizaciones con el valor histórico del dólar en cada fecha, y que siempre tomes el último (o el correspondiente a la fecha de la operación), por eso ahí en vez de poner el "4" simbólico que puse arriba, tendría que ir el campo de esta tabla, y la tabla tiene que estar en un INNER JOIN en el FROM.

Si usas PHP, podés traerte los valores en bruto en la moneda original y convertirlo luego, tomando el valor actual del dólar de algún servicio web, que supongo que debe haber para eso, pero desconozco.

"No estoy de acuerdo con lo que decís, pero defenderé hasta la muerte vuestro derecho a decirlo" - Voltaire.
30-03-2011 12:33
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.762
Agradecimientos dados: 136
Agradecimientos: 381 en 132 posts
Registro en: May 2008
Mensaje: #8
RE: Problema MySQL
creo que no entendiste bien el problema pablo =P
30-03-2011 12:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.646
Agradecimientos dados: 0
Agradecimientos: 7 en 7 posts
Registro en: Apr 2008
Mensaje: #9
RE: Problema MySQL
No sé, para mí devuelve lo que él pide =P.

Y sí, me faltó el order by.

"No estoy de acuerdo con lo que decís, pero defenderé hasta la muerte vuestro derecho a decirlo" - Voltaire.
30-03-2011 14:21
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.762
Agradecimientos dados: 136
Agradecimientos: 381 en 132 posts
Registro en: May 2008
Mensaje: #10
RE: Problema MySQL
ahhhh, viteh, viteh
perdon, para no destruir tanto el topic, en php puede cambiar el 4 por una varialbe previamente cargada con el valor del dolar al armar el query.
(Este mensaje fue modificado por última vez en: 30-03-2011 14:27 por brunodiaz.)
30-03-2011 14:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rld Sin conexión
Secretario General
ლ(ಠ益ಠლ)
*******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 787
Agradecimientos dados: 9
Agradecimientos: 10 en 9 posts
Registro en: Nov 2010
Mensaje: #11
RE: Problema MySQL
Yo estoy intentando crear algo parecido, tambien con PHP y MySQL, a medida que voy aprendiendo (o sea, cuando esté "terminado" va a ser un desastre terrible =D)

Las casas que tienen el precio en pesos en general son las mas baratas...los alquileres tambien se suelen poner en pesos, todo lo demas en dolares. De ultima, la "solución" pajera sería ordenar y listar primero todas las que estan en dolares y despues en pesos...

PD: Lo que hice (seguramente mandandome alguna cagada) para guardar la informacion de cada propiedad son campos con un valor numerico para el precio de venta y alquiler por separado, y otro con un enum para la moneda, tambien para venta y alquiler por separado. Mas que nada por si llega haber un local con un departamento arriba que se vende y se alquila o alguna mezcla así rara, y así no haría falta crear entradas repetidas para una misma cosa.
30-03-2011 21:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
kseba Sin conexión
Profesor del Modulo A
Sin estado :(
*****

Ing. en Sistemas


Mensajes: 279
Agradecimientos dados: 1
Agradecimientos: 0 en 0 posts
Registro en: May 2008
Mensaje: #12
RE: Problema MySQL
Cita:está bien, ahora digo, ¿por qué no hacés eso en php?
sin usar objetos, en estructurado también podés hacerlo. a lo mejor se te complica ordenar el array, pero podés. de todos modos ese select lo estás armando dinámicamente para meterle el valor de la variable valor_dolar.
así si mañana querés meter avisos en euros, yenes y lo que sea, no tenés que armar un select monstruoso con un case o 200 if anidados. ¿se entiende?

Si, hacerlo en el codigo era una alternativa si no podia solucionarlo en la consulta. Pasa que ya tenia todo programado, inicialmente ordenaba todo indistintamente de la moneda hasta que me di cuenta que me habia olvidado eso (muy boludo!) y queria modificarlo de la forma mas simple, sin ponerme a tocar codigo. Supongo que la proxima vez que tenga un problema asi lo hare con un array!

Cita:El tema es que el valor del dolar puede variar. Lo que se puede hacer es tener una tabla de cotizaciones con el valor histórico del dólar en cada fecha, y que siempre tomes el último (o el correspondiente a la fecha de la operación), por eso ahí en vez de poner el "4" simbólico que puse arriba, tendría que ir el campo de esta tabla, y la tabla tiene que estar en un INNER JOIN en el FROM.

En el "panel de control" del sitio esta la opcion de modificar el dolar. En la consulta la incluyo como $valor_dolar y listo.
De todas formas no tiene que ser algo tan exacto, es para tomar de referencia. Como todos los precios se muestran en su moneda original, el valor dolar solamente se usa para ordenar, para saber si 50mil pesos es mas o menos que 50mil dolares, nada mas. Si el dolar no tiene ninguna variacion grande entonces no es necesario actualizarlo a la ultima cotizacion.
30-03-2011 22:38
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.