Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Consulta IF mysql

Estas en el tema de Consulta IF mysql en el foro de Mysql en Foros del Web. Hola como estan??' Tengo el siguiente problema... resulta que me pidieron que cambiara alguno valores para los usuarios por fuera de la base de datos, ...
  #1 (permalink)  
Antiguo 08/05/2013, 16:50
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación Consulta IF mysql

Hola como estan??' Tengo el siguiente problema...

resulta que me pidieron que cambiara alguno valores para los usuarios por fuera de la base de datos, por ejemplo si en la base de datos esta guardado como "trajectory 1" en un select se muestre como "Nueva trayectoria desde lugar 1" --> Ej

Esto lo logro hacer con la siguiente consulta
Código SQL:
Ver original
  1. SELECT
  2.     IF(porigen_id=1,'Destino 1',
  3.         IF(porigen_id=2,'Destino 2',
  4.         IF(porigen_id=3,'Destino 3','No'))) AS porigen_name_if,porigen_name
  5. FROM punto_origen
suponiendo que los datos en la bd son desti1, desty2,desty3, hasta ahora todo bien.....

el tema es que me pidieron que al mostrar el 1 por ejemplo me muestre "Destino 1" y por ejemplo "Nuevo Destino 1"

osea que en vez de esto...

porigen_name_if - ID - Name
Destino 1 1 desty1
Destino 2 2 desty2
Destino 3 3 desty3

La Consulta muestre

porigen_name_if - ID - Name
Destino 1 1 desty1
Nuevo Destino 1 1 desty1
Destino 2 2 desty2
Destino 3 3 desty3

No importa que se repita el codigo 1, de hecho esa es la idea,

ojala me puedan ayudar, muchas gracias

Última edición por gnzsoloyo; 10/05/2013 a las 10:56
  #2 (permalink)  
Antiguo 09/05/2013, 02:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta IF mysql

Hazlo con una consulta union all
Código MySQL:
Ver original
  1. (SELECT porigen_name_if, ID, Name FROM punto_origen)
  2. (SELECT 'Nuevo Destino 1' porigen_name_if , ID, Name FROM punto_origen WHERE porigen_name_if = 'Destino 1') ORDER BY ID
No lo he probado.
  #3 (permalink)  
Antiguo 10/05/2013, 10:29
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta IF mysql

hola gracias por responder, pero no entiendo, porq resulta que el porigen_name_if es =

IF(porigen_id=1,'Destino 1',if(porigen_id=2,'Destino 2',IF(porigen_id=3,'Destino 3','No'))) no es un campo, digamos q lo estoy ocupando como un Case podrías explicarme gracias
  #4 (permalink)  
Antiguo 11/05/2013, 07:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta IF mysql

Yo he intentado darte una solución para los datos que ofrecías.
el union me permite, por un lado, darte los datos de todos los campos tal cual; y, por otro, modificar la salida del campo porigen_name_if cuando el valor de ese campo es desty1. Se trata de un alias, que en el ejmplo que te he puesto es un valor fijo, puesto que no sé qué otras salidas deseas. Naturalmente, un IF anidado como el que propones, te dará el resultado que quieres, pero debes aclarar qué resultado concreto para todos los casos quieres obtener en la consulta a partir de los datos que tienes. Yo pensé que solo te interesaba mostrar dos veces y una de ellas de otra manera los registros cuyo valor fuera desty1.
  #5 (permalink)  
Antiguo 11/05/2013, 13:36
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta IF mysql

ok, gracias, mira voy a tratar de explicarlo mejor voy a poner todo...

tengo esta tabla...

DROP TABLE IF EXISTS punto_origen;
CREATE TABLE punto_origen(
porigen_id INT NOT NULL PRIMARY KEY,
porigen_name VARCHAR(30)
);

INSERT INTO punto_origen(porigen_id,porigen_name) VALUES (1,"Destino a Primer Tramo");
INSERT INTO punto_origen(porigen_id,porigen_name) VALUES (2,"Destino a Segundo Tramo");
INSERT INTO punto_origen(porigen_id,porigen_name) VALUES (3,"Destino a Tercer Tramo");

El tema es q me pedían que ya no se llamaran así los tramos, querían cambiarle los nombres,pero yo no quería hacer eso, porque tendría q cambiar esos mismo nombres en todas las paginas php y js que los necesitaran, entonces aplique esto....


SELECT
IF(porigen_id=1,'Nuevo Destino 1',
IF(porigen_id=2,'Nuevo Destino 2',
IF(porigen_id=3,'Nuevo Destino 3','No'))) AS porigen_name_if,porigen_name
FROM punto_origen

hasta aquí todo bien....... hasta que un día, se les ocurrió incorporar otra ruta más que tuviera la misma función que la que entregaba el código 1, Porque?? (según ellos mas fácil de entender para los usuarios) , pero tu dirás porq no crea otro código con la nueva ruta?? lo que pasa es que esta pequeña tabla esta conectada a otras donde hay mucha información entonces tendría que hacer el llenado de todo eso y no quiero hacerlo :/

Entonces ahí viene mi duda, podría duplicar un código especifico(en realidad solo mostrar) que cumpliera la mismo funcion del codigo

osea en vez de mostrarme la consulta esto:


porigen_name_if(que es el alias que se creo con la consulta if) - porigen_id - porigen_name
"Nuevo Destino 1" 1 Destino a Primer Tramo
"Nuevo Destino 2" 2 Destino a Segunfo Tramo
"Nuevo Destino 3" 3 Destino a Tercer Tramo

cambiarlo por eso. pero

porigen_name_if(que es el alias que se creo con la consulta if) - porigen_id - porigen_name
"Nuevo Destino 1 Incorporado" 1 Destino a Primer Tramo
"Nuevo Destino 1" 1 Destino a Primer Tramo
"Nuevo Destino 2" 2 Destino a Segunfo Tramo
"Nuevo Destino 3" 3 Destino a Tercer Tramo

como ves solo quiero mostrar un nuevo nombre para un código repetido el "1" esta info se va a un listview, por lo tanto si llego a mostrar esos cuatro item si el usuario selecciona los 2 primeros hace lo mismo que es lo q las personas quieren.....

eso es, yo no digo que tenga q hacerse de esa forma, solo puse eso para ver si estaba bien encaminado, no es necesario que sea así, si conoces otra forma, ahí va la tabla para ver si me puedes ayudar please, probé poniendo otro if y agruparlo pero me seguía mostrando 3 resultados

gracias y me avisas cualquier duda, saludos
  #6 (permalink)  
Antiguo 12/05/2013, 01:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta IF mysql

Entiendo, y será fácil si algún criterio permite distinguir ese que llamas "incorporado" que es desty1, del otro desty1. Me refiero a que podamos separarlos en la consulta bien por algún campo de fecha, por el número del id, por alguna característica de los valores de esos registros que los distinga del resto de los desty1 antiguos o viceversa. Con eso será fácil, y lo haremos con UNION ALL. Pero dinos el criterio que los distingue a unos de otros, a los desty1 antiguos de los desty1 incorporados.
Pero te advierto que esto que dices:
Cita:
? lo que pasa es que esta pequeña tabla esta conectada a otras donde hay mucha información entonces tendría que hacer el llenado de todo eso y no quiero hacerlo :/
no es una buena estrategia. Dinos en qué se diferencian realmente esos dos tramos antes de desaconsejarte lo que voy a aconsejarte para la consulta. Yo te diría que asumieras el coste de tener que llenar los datos de esa otra tabla, pero si me dices que son los mismos, usaría un campo de la tabla para distinguir ese desty1 del desty1 incorporado. Pero para orientarte debemos saber qué diferencias hay entre ellos y por ejemplo entre cada no de ellos y los otros dos.

Última edición por jurena; 12/05/2013 a las 01:43
  #7 (permalink)  
Antiguo 12/05/2013, 11:15
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta IF mysql

hola gracias de nuevo por responder....

mira es ahi el gran detalle....

Esos 2 tramos no se diferencian en nada, solo el nombre cambia, lo pidieron solamente para guiar mejor a la persona "cosa que encuentro tonta" es como decir "si yo elijo ese tramo" será lo mismo que elegir el nuevo tramo "incorporado", es simplemente lo mismo con otro nombre, no existe ningun criterio para diferenciarlo, si me empezara a rellanar los datos estaría duplicando información cosa q esta mala, pero como te digo no hay ninguna diferencia, es solo repetir el ID con otro nombre en este caso el "incorporado", no se si me explico bien xD

pongamonos en el caso que lográramos repetirlo, si la persona selecciona cualquiera de los s ID=1 harian los mismo, solo que 1 con un nombre y el otro ID=1 con otro nombre, nada mas

bueno eso seria, ojala se entienda un poqito mejor

gracias :D
  #8 (permalink)  
Antiguo 12/05/2013, 12:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta IF mysql

Código MySQL:
Ver original
  1. IF(porigen_id=1,'Nuevo Destino 1',
  2. IF(porigen_id=2,'Nuevo Destino 2',
  3. IF(porigen_id=3,'Nuevo Destino 3','No'))) porigen_name_if, porigen_id
  4. FROM punto_origen)
  5. IF (porigen_id=1, 'Nuevo Destino 1 incorporado',''), porigen_id
  6. FROM punto_origen
  7. WHERE porigen_id=1) ORDER BY porigen_id
  #9 (permalink)  
Antiguo 12/05/2013, 19:24
 
Fecha de Ingreso: noviembre-2011
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta IF mysql

Waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaa

lo lograste, muchas gracias, muchas muchas gracias, no sabia q el union all te daba esa posibilidad, yo generalmente uno con id=id no con union, a veces ocupaba el natural joiin, pero no sabia q el union te daba esa opción, muchas gracias , te pasaste, tuve q modificar un poquito el código porq "el nuevo campo mostrado" me mostraba el id, asi q lo cambie por el name, gracias nuevamente, te pasaste :) :)

aquí el codigo

(SELECT IF(porigen_id=1, 'desti 1', IF(porigen_id=2, 'desti 2', IF(porigen_name='destino 3 original', 'desti 3', 'No' ) ) ) porigen_name_if, porigen_name FROM punto_origen) UNION ALL (
SELECT IF(porigen_name='destino 3 original', 'nuevo destino', '') , porigen_name FROM punto_origen WHERE porigen_name='destino 3 original') ORDER BY porigen_name DESC


gracias nuevamente :)

Etiquetas: select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:49.