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

Como usar el if dentro del select con inner join

Estas en el tema de Como usar el if dentro del select con inner join en el foro de Bases de Datos General en Foros del Web. Saludos amtes que nada gracias a todos por su constante ayuda. Bueno cuando hago estas consultas por separado funcionan pero al juntarlas no. Aqui busco ...
  #1 (permalink)  
Antiguo 19/01/2012, 01:22
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 14 años, 4 meses
Puntos: 3
Como usar el if dentro del select con inner join

Saludos amtes que nada gracias a todos por su constante ayuda. Bueno cuando hago estas consultas por separado funcionan pero al juntarlas no.

Aqui busco si elid o id valen 3.

Código PHP:
mysql_query("SELECT tabla1.*,tabla2.name FROM tabla1 INNER JOIN tabla2 ON tabla1.elid = tabla2.id WHERE (tabla1.elid = 3 OR tabla1.id=3) "); 
Y en estas si vale 3 "id" que se cambie a un nuevo valor:
Código PHP:
mysql_query("SELECT *, CASE id WHEN '3' THEN 'NUEVO VALOR' END AS id FROM tabla1 WHERE (elid = 3 OR id=3) ");

mysql_query("SELECT *, if(id=3,NUEVO VALOR,VALOR DEFAULT) as id FROM tabla1 WHERE (elid = 3 OR id=3) "); 
Todo lo anterior funciona, como dije al unirlos es el problema:

Código PHP:

mysql_query
("SELECT tabla1.*,tabla2.name if(tabla.id=3,NUEVO VALOR,VALOR DEFAULT) as tabla.id

FROM tabla1 INNER JOIN tabla2 ON tabla1.elid = tabla2.id WHERE (tabla1.elid = 3 OR tabla1.id=3) "
); 
Lo que quiero que haga es que en la tabla1 si el id vale 3 que cambie su valor pero no funciona, espero alguien me indique mi error, saludos y gracias a todos.

Última edición por cyber_dark; 19/01/2012 a las 01:54
  #2 (permalink)  
Antiguo 19/01/2012, 09:29
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Como usar el if dentro del select con inner join

Hola cyber_dark:

Tienes varios detalles en la consulta...


Primero: Recuerda que cada uno de los campos que se utilizan en el SELECT se deben separa por comas... te falta una coma después del campo tabla2.name, justo antes del if:

Código:
tabla2.name, if(tabla.id=3,NUEVO VALOR,VALOR DEFAULT) as tabla.id

Segundo: el objeto TABLA NO EXISTE EN LA CONSULTA (en el FROM tienes Tabla1, en el INNER JOIN Tabla2), por lo tanto la condición del IF está incorrecta:

Código:
IF(tabla.id=3,NUEVO VALOR,VALOR DEFAULT)
Tercero: no puedes poner un alias tabla.id ya que esta es la manera en que haces referencia a una tabla y un campo en todo caso podrías dejarlo simplemente como ID o si quieres que el alias sean las dos palabras separadas por el punto debes colocarlo entre acentos graves o inversos:

Código:
as `tabla.id`
Como vez, la mayoría son sólo descuidos que haz cometido al momento de querer hacer la consulta. un poco más de cuidado para la próxima antes de decidir publicar una pregunta.

Saludos.
  #3 (permalink)  
Antiguo 19/01/2012, 14:16
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Como usar el if dentro del select con inner join

Saludos muchas gracias por responder, si tenias razon si lo pongo asi ya no me marca error

Código PHP:
mysql_query("SELECT tabla1.*,tabla2.name if(tabla1.id=3,NUEVO VALOR,tabla1.id) as `tabla1.id`

FROM tabla1 INNER JOIN tabla2 ON tabla1.elid = tabla2.id WHERE (tabla1.elid = 3 OR tabla1.id=3) "
); 
Pero no parece que aunque se cumpla la condicion no esta haciendo nada, trate te cambiar el alias asi y me marca error:

Código PHP:
mysql_query("SELECT tabla1.*,tabla2.name if(tabla1.id=3,NUEVO VALOR,tabla1.id) as `tabla1.NID`

FROM tabla1 INNER JOIN tabla2 ON tabla1.NID = tabla2.id WHERE (tabla1.elid = 3 OR tabla1.id=3) "
); 
Guardo el resultado de la condicion en tabla1.NID y luego ese mismo valor quiero usarlo en el inner join para comparar y no funciona, estoy haciendolo mal de nuevo o no se puede lo que quiero? Saludos y gracias por responder.
  #4 (permalink)  
Antiguo 19/01/2012, 14:30
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Como usar el if dentro del select con inner join

Olvidaste poner la coma antes del id (primera observación de mi post anterior),

También tendrías que definir a qué te refieres con la parte NUEVO VALOR que aparece en el if... dado que tu campo tabla1.id es de tipo numérico, entonces NUEVO VALOR debe ser también un número, por ejemplo si quisieras cambiar el 3 por un 999 sería así:

Cita:
mysql_query("SELECT tabla1.*,tabla2.name, if(tabla1.id=3, 999, tabla1.id) as `tabla1.id`.............
Si vas a manejar esto como un parámetro, la construcción de la consulta es incorrecta, pues deberías hacer algo como esto:

Cita:
mysql_query("SELECT tabla1.*, tabla2.name, if(tabla1.id=3,".aqui_pones_tu_variable.",tabla1.id) as `tabla1.id`..................
No trabajo con PHP, pero si no mal recuerdo así se maneja la concatenación. Es cuestión de que revises la sintaxis.

En azul está marcada la coma que hace falta.

Saludos
Leo.
  #5 (permalink)  
Antiguo 19/01/2012, 14:54
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Como usar el if dentro del select con inner join

Te mande un mp espero no te importe
  #6 (permalink)  
Antiguo 19/01/2012, 15:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Como usar el if dentro del select con inner join

Hola cyber_dark:

Leí tu mensaje, pero no acostumbro contestar de manera particular preguntas, sobre todo por el hecho de que a alguien más le puede servir la respuesta. No me quedó claro qué es lo que necesitas obtener es más, podría asegurar que estás equivocando el camino al tratar de hacer un if... pon algunos datos de ejemplo de tus tablas así como la estructura de las mismas y dinos qué esperas de salida... A partir de esta información será más fácil tratar de ayudarte.

Saludos
Leo.
  #7 (permalink)  
Antiguo 19/01/2012, 18:40
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Como usar el if dentro del select con inner join



Como te comente es un sistema de amigos, supongamos que tu eres 5 y yo el 3 y Maria el 6. En el primero caso Tu me agregaste y pero no me aceptaste asi que ahi no pasa nada, En el segundo tu me agregaste y yo te acepte (Necesito "mi_id_usuarios"), luego agregue a maria y me acepto (Necesito "id_usuarios") y es aqui donde entra el if (id_usuarios==3) { id_usuarios=amigo_id_usuarios } Necesito hacer esto para que en el inner join cuando consulte si llegara a suceder que "id_usuarios" es mi id entonces lea "mi_id_usuarios" pues de lo contrario cuando consulte en la otra tabla leeria cyber_dark y necesito leonardo_josue.
No se si me explique que quiero y gracias por tu ayuda =).
  #8 (permalink)  
Antiguo 20/01/2012, 09:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Como usar el if dentro del select con inner join

Si entendí bien, lo que que quieres obtener es una lista de todos tus amigos, es decir, aquellos que te agregaron como amigo y aceptaste o aquellos a los que tú agregaste como amigo y aceptó correcto??? esto podrías plantearlo de dos formas diferentes, una con una unión, obteniendo cada sección por separado, y con la idea que estabas intentando, aunque un poco diferente. Checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM usuarios;
  2. +-------------+----------------+
  3. | id_usuarios | usuario        |
  4. +-------------+----------------+
  5. |           3 | cyber_dark     |
  6. |           5 | leonardo_josue |
  7. |           6 | maria          |
  8. +-------------+----------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM amigos;
  12. +----------------+-------------+------------+
  13. | mi_id_usuarios | id_usuarios | aceptacion |
  14. +----------------+-------------+------------+
  15. |              3 |           5 | no         |
  16. |              5 |           3 | si         |
  17. |              3 |           6 | si         |
  18. +----------------+-------------+------------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT u.* FROM usuarios u INNER JOIN
  22.     -> (SELECT mi_id_usuarios id FROM amigos
  23.     -> WHERE id_usuarios = 3 AND aceptacion = 'si'
  24.     -> UNION
  25.     -> SELECT id_usuarios id FROM amigos
  26.     -> WHERE mi_id_usuarios = 3 AND aceptacion = 'si') a
  27.     -> ON u.id_usuarios = a.id;
  28. +-------------+----------------+
  29. | id_usuarios | usuario        |
  30. +-------------+----------------+
  31. |           5 | leonardo_josue |
  32. |           6 | maria          |
  33. +-------------+----------------+
  34. 2 rows in set (0.00 sec)
  35.  
  36. mysql> SELECT u.* FROM usuarios u INNER JOIN
  37.     -> (SELECT
  38.     -> IF(mi_id_usuarios = 3, id_usuarios, mi_id_usuarios) id
  39.     -> FROM amigos a
  40.     -> WHERE (mi_id_usuarios = 3 OR id_usuarios = 3) AND aceptacion = 'si') a
  41.     -> ON u.id_usuarios = a.id;
  42. +-------------+----------------+
  43. | id_usuarios | usuario        |
  44. +-------------+----------------+
  45. |           5 | leonardo_josue |
  46. |           6 | maria          |
  47. +-------------+----------------+
  48. 2 rows in set (0.00 sec)

Analiza las subconsultas en ambos casos, en el primero se hace uso de una UNION, mientras que en la segunda se hace uso de un IF, cualquier duda la comentas en el foro y tratamos de apoyarte.

Saludos
Leo.
  #9 (permalink)  
Antiguo 20/01/2012, 13:59
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Como usar el if dentro del select con inner join

Si eso es lo que quiero hacer, si funciono muchas gracias no sabia que podias hacer un select dentro de otro select, antes hacia una consulta e impria en php y en el php hacia el if para luego hacer otra consulta para sacar el nombre y otra vez imprimir en php, pero esto me ahorrara muchas lineas de codigo, gracias.

Etiquetas: join, mysql, select, tabla, usar
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 14:36.