Foros del Web » Programando para Internet » PHP »

En consulta MySQL incluir un ARRAY (o algo parecido)

Estas en el tema de En consulta MySQL incluir un ARRAY (o algo parecido) en el foro de PHP en Foros del Web. Consulto a una tabla y con LEFT JOIN hago una relación a una segunda tabla así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original $consulta = mysql_query ...
  #1 (permalink)  
Antiguo 07/09/2011, 12:10
 
Fecha de Ingreso: enero-2002
Mensajes: 1.136
Antigüedad: 17 años
Puntos: 18
En consulta MySQL incluir un ARRAY (o algo parecido)

Consulto a una tabla y con LEFT JOIN hago una relación a una segunda tabla así:

Código MySQL:
Ver original
  1. $consulta = mysql_query("SELECT a.llave, a.clave, a.descripcion, a.tipo, f.nombre
  2.                      FROM $tabla a
  3.                      LEFT JOIN familia f on f.llave=a.tipo", $link)
  4.                      or die ("No se pudo ejecutar");

Lo anterior trabaja perfecto.

Ahora requiero no utilizar la segunda tabla y en vez de ello, utilizar un arreglo o una matriz.

Tengo la siguiente matriz:
familia[1] = "Gato";
familia[2] = "Perro";
familia[3] = "Pato";

Y requiero en la consulta relacionar esta matriz, imaginemos algo así:

Código MySQL:
Ver original
  1. $consulta = mysql_query("SELECT a.llave, a.clave, a.descripcion, a.tipo, f.nombre
  2.                      FROM $tabla a
  3.                      LEFT JOIN ARRAY familia f on f.llave=a.tipo", $link)
  4.                      or die ("No se pudo ejecutar");

Actualmente lo que hago es hacerlo antes de desplegar el dato lo convierto con PHP a través de un SWITCH, pero deseo poderlo hacer directamente desde MYSQL.

Muchas gracias
  #2 (permalink)  
Antiguo 07/09/2011, 14:40
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 8 años, 2 meses
Puntos: 50
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Creo que lo que estás buscando tiene que ver más con sql que con php. De todas formas no se entiende que es lo que intentás hacer. Pusiste dos veces la misma consulta...
  #3 (permalink)  
Antiguo 07/09/2011, 14:48
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 13 años
Puntos: 96
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Saludos

Lo podrías manejar con un implode en php y en mysql manejas el operador de comparación IN.

Código PHP:
Ver original
  1. $arrayFamilia=(",",$familia);
  2.  
  3. $sql="SELECT * FROM tabla where familia IN ($arrayFamilia)";
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #4 (permalink)  
Antiguo 07/09/2011, 15:13
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 7 años, 5 meses
Puntos: 297
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Yo personalmente no entiendo que es exactamente lo que intentas hacer ¿Quieres consultar en la base de datos a partir de un array? ¿que el result sea un array?
  #5 (permalink)  
Antiguo 07/09/2011, 18:19
 
Fecha de Ingreso: enero-2002
Mensajes: 1.136
Antigüedad: 17 años
Puntos: 18
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Trataré de ser un poco más claro, perdon por no haberlo sido antes.

Tengo dos tablas:

TABLA 1: personas:
llave int(8)
nombre char(80)
sexo char(1)

La cual contiene 3 registros:
1, Juan, M
2, Pedro, M
3, Lupe, F

TABLA 2: sexos:
llave char(1)
genero char(20)

La cual contiene 2 registros:
M, Masculino
F, Femenino

Realizo la siguiente consulta:

$consulta = mysql_query("SELECT p.llave, p.nombre, p.sexo, s.genero
FROM personas
LEFT JOIN sexos s on s.llave=p.sexo", $link)

Lo anterior me genera:

1, Juan, M, Masculino
2, Pedro, M, Masculino
3, Lupe, F, Femenino

Considerando que solo hay 2 sexos, deseo hacer la consulta sin necesidad tener la tabla2, y que en MySQL los campos de sexo sean identificados según corresponda (MASCULINO o FEMENINO). Lo anterior lo imaginé con un ARRAY, por eso mi pregunta de como lo podría hacer.

Espero haber sido un poco más claro.

Gracias
  #6 (permalink)  
Antiguo 07/09/2011, 19:03
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 7 años, 5 meses
Puntos: 297
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

En realidad la "tabla2" no te hace falta, ya que el campo "sexo" de la "tabla1" cumple exactamente esa función, ahora tendrás que decidir si quieres dejar sólo las iniciales (M/F) o la palabra completa (Masculino/Femenino).

Ahora, aparte de lo anterior, quieres que exclusivamente se pueda elegir uno de los dos y no poner (por ejemplo), "Transexual", tendrías que utilizar un campo "enum" (http://otroblogmas.com/diferencias-entre-enum-y-set-en-mysql/)
  #7 (permalink)  
Antiguo 07/09/2011, 19:21
 
Fecha de Ingreso: enero-2002
Mensajes: 1.136
Antigüedad: 17 años
Puntos: 18
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Cita:
Iniciado por hasdpk Ver Mensaje
En realidad la "tabla2" no te hace falta, ya que el campo "sexo" de la "tabla1" cumple exactamente esa función, ahora tendrás que decidir si quieres dejar sólo las iniciales (M/F) o la palabra completa (Masculino/Femenino).

Ahora, aparte de lo anterior, quieres que exclusivamente se pueda elegir uno de los dos y no poner (por ejemplo), "Transexual", tendrías que utilizar un campo "enum" (http://otroblogmas.com/diferencias-e...-set-en-mysql/)
Gracias por tu comentario, pero no es lo que busco ni requiero.

Lo que puse es un ejemplo para explicar lo que busco. Deseo poder asignar a las personas que tengan M la palabra Masculino y a los F asignarles Femenino, todo desde MySQL y sin necesidad de tener la tabla2.

Gracias
  #8 (permalink)  
Antiguo 07/09/2011, 19:40
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 7 años, 5 meses
Puntos: 297
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Entonce lo que necesitas es declarar un IF en el mismo SELECT, y que puedes consultar la sintaxis en:

http://dev.mysql.com/doc/refman/5.0/es/control-flow-functions.html

De todas formas te lo voy a explicar porque yo las había hecho pero en SQL Server:

Código SQL:
Ver original
  1. SELECT llave, nombre, sexo, IF(sexo = 'M', 'Masculino', 'Femenino') AS genero FROM personas

El IF funciona exactamente igual que el de PHP:
- La primera declaración "sexo = 'M'" es la condición del IF.
- La segunda declaración "'Masculino'" se imprime si la primera es TRUE.
- La terceda declaración "'Femenino'" se imprime si la primera es FALSE, hace de ELSE.
  #9 (permalink)  
Antiguo 07/09/2011, 20:23
 
Fecha de Ingreso: enero-2002
Mensajes: 1.136
Antigüedad: 17 años
Puntos: 18
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Cita:
Iniciado por hasdpk Ver Mensaje
Entonce lo que necesitas es declarar un IF en el mismo SELECT, y que puedes consultar la sintaxis en:

http://dev.mysql.com/doc/refman/5.0/...functions.html

De todas formas te lo voy a explicar porque yo las había hecho pero en SQL Server:

Código SQL:
Ver original
  1. SELECT llave, nombre, sexo, IF(sexo = 'M', 'Masculino', 'Femenino') AS genero FROM personas

El IF funciona exactamente igual que el de PHP:
- La primera declaración "sexo = 'M'" es la condición del IF.
- La segunda declaración "'Masculino'" se imprime si la primera es TRUE.
- La terceda declaración "'Femenino'" se imprime si la primera es FALSE, hace de ELSE.
Excelente, es lo que buscaba, probaré si funciona (espero hacerlo funcionar).

Complemento: ¿Y si en vez de 2 opciones requiero 6? ¿Que es lo más recomendable?

Gracias
  #10 (permalink)  
Antiguo 08/02/2019, 05:35
Avatar de airos  
Fecha de Ingreso: mayo-2008
Mensajes: 68
Antigüedad: 10 años, 8 meses
Puntos: 3
De acuerdo Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Cita:
Iniciado por Bier Ver Mensaje
Excelente, es lo que buscaba, probaré si funciona (espero hacerlo funcionar).

Complemento: ¿Y si en vez de 2 opciones requiero 6? ¿Que es lo más recomendable?

Gracias
Qué tal, es un tema viejo pero estuve trabajando un poco con ello actualmente y se me presentó la misma duda.

Realicé un par de pruebas y la solución que aporto es la siguiente al margen de que sea correcta o no (lo cual vi que nadie aportó nada al respecto de la ultima pregunta), se puede jugar con lo siguiente:

Condición original para responder a lo verdadero o falso
if(condición, verdadero, falso)

Código PHP:
if(sexo 'm''Masculino''Femenino'
Es decir que si sexo = 'm', mostraré Masculino como resultado y si es 'f', mostraré Femenino.

En mi ENUM tengo 3 opciones: m, f, none y lo planteo de la siguiente manera, lo cual al menos a mi me funciona:

Código PHP:
if(sexo 'm''Masculino', if(sexo 'f''Femenino''No definido')) as genero 
Se trata de realizar otra consulta en el valor Falso, así le doy la posibilidad de seleccionar otras alternativas.

Entonces sería así:
m = Masculino
f = Femenino
none = No definido


Espero que sirva como orientación.

Saludos!
__________________
“El fracaso es una gran oportunidad para empezar otra vez con más inteligencia.” Henry Ford.
  #11 (permalink)  
Antiguo 08/02/2019, 21:08
 
Fecha de Ingreso: abril-2006
Mensajes: 209
Antigüedad: 12 años, 9 meses
Puntos: 27
Respuesta: En consulta MySQL incluir un ARRAY (o algo parecido)

Cita:
Iniciado por Bier Ver Mensaje
Trataré de ser un poco más claro, perdon por no haberlo sido antes.

Tengo dos tablas:

TABLA 1: personas:
llave int(8)
nombre char(80)
sexo char(1)

La cual contiene 3 registros:
1, Juan, M
2, Pedro, M
3, Lupe, F

TABLA 2: sexos:
llave char(1)
genero char(20)

La cual contiene 2 registros:
M, Masculino
F, Femenino

Realizo la siguiente consulta:

$consulta = mysql_query("SELECT p.llave, p.nombre, p.sexo, s.genero
FROM personas
LEFT JOIN sexos s on s.llave=p.sexo", $link)

Lo anterior me genera:

1, Juan, M, Masculino
2, Pedro, M, Masculino
3, Lupe, F, Femenino

Considerando que solo hay 2 sexos, deseo hacer la consulta sin necesidad tener la tabla2, y que en MySQL los campos de sexo sean identificados según corresponda (MASCULINO o FEMENINO). Lo anterior lo imaginé con un ARRAY, por eso mi pregunta de como lo podría hacer.

Espero haber sido un poco más claro.

Gracias
pero tu mismo te autorrespondiste

solo para el ejemplo que usas, solo haz uso de ALIAS, y LEFT JOIN

Código SQL:
Ver original
  1. SELECT personas.nombre AS nombre, sexos.genero AS sexo FROM personas LEFT JOIN sexos ON personas.sexo=sexos.llave
y tienes en teoria una unica consulta, claro internamente el motor SQL mysql,mssql etc, se encarga de gestionar las consultas y cachearlas para hacelerar futuras consultas
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr



La zona horaria es GMT -6. Ahora son las 23:38.