PHP - Selecionar filas que contenga cualquier palabra dentro de un array

 
Vista:

Selecionar filas que contenga cualquier palabra dentro de un array

Publicado por Marino (2 intervenciones) el 08/03/2020 13:10:57
Hola, acabo de empezar con mysql y php y he estado buscando respuestas a mi pregunta en este foro pero como no halle la solucion en ningun post, he decidido postear yo mismo, pido disclpas de antemano si no busque suficiente y estoy repitiendo tema.

Al lio:
tengo una base de datos de prueba que contiene una unica tabla con 2 columnas:nombre e idiomas, que se va rellenando atraves de un formulario html, el campo idiomas es un array y guarda los datos separados por comas, es decir si en el formulario marcamos varias casillas en el campo idomas el valor de este quedaria algo asi: "ingles,frances,aleman", por ejemplo. He hecho un buscador donde pretendo que se pueda filtrar por idioma y ahora quiero que mysql seleccione las filas que contienen un determinado valor y para ello utilizo la siguiente sentencia:

1
mysqli_query($con,"SELECT * FROM candidatos WHERE  idioma LIKE '%$valores%'");

el problema es que solamente me selecciona las filas que contien los valores que hay en la variable $valores (recogida del buscador) si estan en un determinado orden pero yo lo que quiero es que liste todas las filas que contengan cualquiera de los valores que me ha recogido la variable $valores independientemente del orden, para que se vea mas claro:

tengo un registro en la fila 1 donde idioma vale:ingles,frances,aleman,griego
y otro en la fila 2 donde idioma vale:ingles,aleman,griego

si selecciono en mi buscador que me muestre todos los registros de las personas que hablen ingles y aleman
solo me muestra el registro de la fila 2 ya que el de la 1 tiene la palabra frances entre medias...

un saludo y gracias de antemano...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Selecionar filas que contenga cualquier palabra dentro de un array

Publicado por Julio (830 intervenciones) el 08/03/2020 13:24:12
Hola.

Piensa que en la base de datos no tienes un array, tienes una cadena, con lo que no puedes jugar con ella pensando en términos de array. Una opción es traerte todos los registros y hacer la búsqueda luego, una vez transformado en array. Pero, obviamente, esto son más pasos y se pierde eficiencia.

Sólo se me ocurre, en este caso, que hagas una sentencia de este tipo:

1
"SELECT * FROM candidatos WHERE (idioma LIKE '%$valor%' OR idioma LIKE '%$valor2%' OR idioma LIKE '%$valor3%')"

Es decir, que vayas anidando. ¿Cómo? Puedes puedes construir con un foreach esa parte de la sentencia de forma dinámica y luego juntarla con el principio de la parte del SELECT.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Selecionar filas que contenga cualquier palabra dentro de un array

Publicado por Marino (2 intervenciones) el 08/03/2020 17:27:55
Muchas Graciaaaass!!
como bien dices no parece la manera mas eficiente pero funciona a la perfección que de momento es lo que me interesa, al final la cosa quedo asi:

1
2
3
4
5
6
$busqueda = mysqli_query($con,"SELECT * FROM candidatos WHERE visa LIKE '$Bvisa' AND idioma LIKE '%$Bidiomas[0]%'
                             AND idioma LIKE '%$Bidiomas[1]%'
                             AND idioma LIKE '%$Bidiomas[2]%'
                             AND idioma LIKE '%$Bidiomas[3]%'
                             AND idioma LIKE '%$Bidiomas[4]%'
                             AND idioma LIKE '%$Bidiomas[5]%'");

Gracias de nuevo y un saludo. Seguiré aprendiendo y espero ser yo el que responda algún post en alguna ocasión :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Selecionar filas que contenga cualquier palabra dentro de un array

Publicado por Julio (830 intervenciones) el 08/03/2020 17:33:44
Me alegro de que te haya ido bien. De todas formas, ¿siempre vas a tener 6 idiomas para buscar? Porque no sé si sería mejor hacer un OR en vez de AND y montarlo dinámicamente si en algún momento se buscan sólo 3.

Aunque al final es depende cómo lo tengas montado tú mismo, claro. Pero controla bien esas supuestas particularidades (que no tengas siempre 6 idiomas) para que te funcione eso o no.

Y, si estás aprendiendo, te invito a pasarte por mi blog, a suscribirte si quieres y a ver el índice de contenidos de lo que hay y lo que está previsto para publicarse en las próximas semanas. Siempre es un placer ayudar.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar