Foros del Web » Programando para Internet » PHP »

Consulta LIKE multiple con array?

Estas en el tema de Consulta LIKE multiple con array? en el foro de PHP en Foros del Web. Buenas, pues es fácil, tengo en la base de datos un campo que me almacena las categorías a las que pertenece una página utilizando las ...
  #1 (permalink)  
Antiguo 23/12/2007, 22:44
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 21 años, 10 meses
Puntos: 0
Consulta LIKE multiple con array?

Buenas, pues es fácil, tengo en la base de datos un campo que me almacena las categorías a las que pertenece una página utilizando las ids.
por ejemplo, puede pertenecer a la 10,4,56,30,87 que son las ids de las categorías que luego traduciría con otras sentencias.

Lo que quiero es hacer una sentencia que me muestre una lista de páginas que por ejemplo pertenezca a las categorías 56 y 30 (por poner un ejemplo, también podría querer que fuese solo de una categoría o que fuese de más categorías).

Había pensado en hacer una sentencia tipo

SELECT * WHERE campo LIKE '%$cat[0]%' && '%$cat[1]%'

el problema con el que me topo es que no sé si esto se supone funciona y tampoco me queda claro lo de que pueda tener más o menos categorías la búsqueda, por que lo quiero dejar dinámico para solo decirle las categorías a las que pertenece para que me muestre la lista.

Si alguien me puede guiar por el buen camino o se le ocurre alguna forma mejor me lo podría decir? muchas gracias

PD: en un principio tendría los nombres de las cats que transformo a sus ids antes de hacer la consulta, lo que no tengo claro es como meter estas cats en un array y usarlo para la búsqueda si es que se puede.
  #2 (permalink)  
Antiguo 24/12/2007, 08:43
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
De acuerdo Re: Consulta LIKE multiple con array?

Saludos...

Esto me parese que es mas tema de php que de Bases de Datos pero bueno te indico como podrias realizarlo.

Código PHP:
//Consulta de los ids de los cats
$consulta=mysql_query("select id from tabla where .........");
//La respuesta a esa consulta la manejas es un arreglo y lo vas recorriendo con un ciclo while
while($arreglo_consulta=mysql_fetch_array($consulta)){
$categoria1=$arreglo_consulta[0];
//Luego realizas la consulta 
$consulta2=mysql_query("SELECT * from tabla WHERE campo LIKE '%$categoria1%'");



Esta es una forma que podrias utilizar, espero que te halla servido como idea para lo que necesitas.

Hasta Pronto!
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 24/12/2007, 09:07
 
Fecha de Ingreso: agosto-2006
Mensajes: 50
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Consulta LIKE multiple con array?

hola

puedes hacer eso con un where in...

asi


select..... from ..... where campo in (id1, id2, id3....)

ahora, los id los puedes colocar dentro del where con un ciclo, preguntando si el dato no es el ultimo, que le concatene una coma, si no no.....

saludos
  #4 (permalink)  
Antiguo 24/12/2007, 18:30
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Consulta LIKE multiple con array?

Buenas, ante todo agradezco muchísimo la ayuda que me prestáis, me habéis inspirado a una cosa, decidme si podría ser así:

Código PHP:
$regs '13,14,17,87,54,3'//serían las ids de categorías


$sql = ("SELECT * FROM pagina WHERE ");

$h = array($regs);
$i '0';
while(
$h){
$sql .= ("LIKE '$h[$i]' ");
$i++
}

$result mysql_fetch_array($sql); 
Es la idea básica, me podríais decir si podría funcionar? o que fallos tiene el código? así puedo ir aprendiendo de los errores y puede que le sirva a alguien más. Gracias y un saludo.
  #5 (permalink)  
Antiguo 26/12/2007, 18:18
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: Consulta LIKE multiple con array?

Hola, en primer lugar.

Tu principal problema es que partes de una mala estructura de BD. Para hacer lo que quieres hacer, la forma correcta es que crees una tabla en la que tengas id_página e id_categoría. Esto es lo que se llama una relación N a N y la implementación como te digo sería la "normalizada".

Ahora bien, te comento esto porque básicamente ninguna de las opciones que tienes arriba sirven.
Piensa en el caso en el que quieres saber las páginas que pertenecen a la categoría 3. Por utilizar un LIKE, y tratar las id's de categoría como texto, la hacer LIKE %3%, tambié te retornará como páginas válidas aquellas de la categoría 13, 30, 23, etc... y cualquier otro número que contenga un 3.

Mejor arregla la estructura y verás que las queries salen mucho más fácil. Si necesitas más ayuda con eso pregunta aquí que eso sí es un tema 100% de base de datos y por mi parte, estaré encantado en ayudar.
  #6 (permalink)  
Antiguo 27/12/2007, 07:15
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Consulta LIKE multiple con array?

pelu0 y VicHaunter, esta es una sección de BD y no de programación. Por favor, si van a responder, que sean consultas SQL y NO código de programación.
Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #7 (permalink)  
Antiguo 29/12/2007, 20:39
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Consulta LIKE multiple con array?

Cita:
Iniciado por pragone Ver Mensaje
Hola, en primer lugar.

Tu principal problema es que partes de una mala estructura de BD. Para hacer lo que quieres hacer, la forma correcta es que crees una tabla en la que tengas id_página e id_categoría. Esto es lo que se llama una relación N a N y la implementación como te digo sería la "normalizada".

Ahora bien, te comento esto porque básicamente ninguna de las opciones que tienes arriba sirven.
Piensa en el caso en el que quieres saber las páginas que pertenecen a la categoría 3. Por utilizar un LIKE, y tratar las id's de categoría como texto, la hacer LIKE %3%, tambié te retornará como páginas válidas aquellas de la categoría 13, 30, 23, etc... y cualquier otro número que contenga un 3.

Mejor arregla la estructura y verás que las queries salen mucho más fácil. Si necesitas más ayuda con eso pregunta aquí que eso sí es un tema 100% de base de datos y por mi parte, estaré encantado en ayudar.
Buenas, perdona pero he estado buscando un poco y no he encontrado información de que son las relaciones n a n. Sería mucho pedir que me explicaras un poco por encima lo que es para que lo entienda? es que no lo había oido.
Así quizás entienda a lo que te refieres y pueda pensar en una mejor forma de hacerlo, o si puedes echarme una mano con ello, es que de bases de datos estoy algo verde.

Gracias
  #8 (permalink)  
Antiguo 29/12/2007, 20:42
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Consulta LIKE multiple con array?

Cita:
Iniciado por BrujoNic Ver Mensaje
pelu0 y VicHaunter, esta es una sección de BD y no de programación. Por favor, si van a responder, que sean consultas SQL y NO código de programación.
Función de la sección de Base de Datos
Si pero es que una cosa tiene relación con la otra, estoy intentando estructurar una base de datos con sus consultas, o hago otro post y pongo el vínculo desde aquí para las partes php y dejo aqui las bases de datos y vamos saltando de una pagina a otra??
  #9 (permalink)  
Antiguo 30/12/2007, 21:11
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Consulta LIKE multiple con array?

Si no sabes la diferencia entre Base de Datos y programación, lee la Función de la sección de Base de Datos

Es muy diferente una cosa con otra y si, se pueden complementar pero NO en esta sección, si no sabes como separar el código de programación con SQL puro, eso ya es estar mal.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #10 (permalink)  
Antiguo 30/12/2007, 21:14
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Consulta LIKE multiple con array?

Cita:
Iniciado por BrujoNic Ver Mensaje
Si no sabes la diferencia entre Base de Datos y programación, lee la Función de la sección de Base de Datos

Es muy diferente una cosa con otra y si, se pueden complementar pero NO en esta sección, si no sabes como separar el código de programación con SQL puro, eso ya es estar mal.
He dicho que son las dos cosas juntas las que me van a servir y que si abría otra rama en php y ponía aquí el vínculo para saltar de una a otra, no que no sé la diferencia entre php y sql, creía haber sido bastante claro.
  #11 (permalink)  
Antiguo 31/12/2007, 10:42
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Consulta LIKE multiple con array?

Bueno, si crees que sos claro, cuando necesites código, por favor pregunta en php, ya traté de explicártelo.

Si vuelvo a ver que preguntas por código de programación o colocas variables de programación, voy a cerrar o borrar tus temas.

No lo tomes como algo personal, pero si queres complementarlos, para eso está PHP, si necesitas consultas SQL puras, las haces aquí.

Saludos.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #12 (permalink)  
Antiguo 01/01/2008, 13:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Re: Consulta LIKE multiple con array?

Tema trasladado y reabierto aquí, en el foro de PHP.

Saludos
  #13 (permalink)  
Antiguo 01/01/2008, 13:52
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Consulta LIKE multiple con array?

ajajajajaja, asi de facil............. move_post_to(PHP); ejeejejeje!!!!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #14 (permalink)  
Antiguo 01/01/2008, 13:59
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: Consulta LIKE multiple con array?

la verdad es que primero tienes que definir bien tu problema... pues en el primer post..........yo pense que ya tenias organizada bien tu B.D... y si dices que tienes un campo en el cual estan CATEGORIAS A LOS K PERTENECE, BUENO, PENSE QUE LOS HABIAS PUESTO POR ALGO...

lo que queria saber es como esta separandos esos datos en ese registro,
por espacio? guion? guion bajo? etc..
si es asi y necesitas saber las categorias de esa persona.........

usa array explode ( string separador, string cadena [, int limite] )
en donde en un array tendras los valores que tengas ahi, claro pones el separador que uses.

Código PHP:
<?php
// Ejemplo 1
$pizza  "trozo1 trozo2 trozo3 trozo4 trozo5 trozo6";
$trozos explode(" "$pizza);
echo 
$trozos[0]; // trozo1
echo $trozos[1]; // trozo2
ahora si tu problema es de estructura, huy.............
sabes que es una relacion 1-N
1-1, NXM?

cuando existe una relacion NxM tiene que haber una relacion intermedia...

www.mysql-hispano.org
ahi encontraran buena onfo
tambien en el foro de B.D encontraras en las FAQS.
por eso es bueno siempre leer las reglas para que los moderadores no cierren tu post o lo trasladen, jejej!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
  #15 (permalink)  
Antiguo 01/01/2008, 14:23
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Consulta LIKE multiple con array?

Cita:
Iniciado por vevni Ver Mensaje
la verdad es que primero tienes que definir bien tu problema... pues en el primer post..........yo pense que ya tenias organizada bien tu B.D... y si dices que tienes un campo en el cual estan CATEGORIAS A LOS K PERTENECE, BUENO, PENSE QUE LOS HABIAS PUESTO POR ALGO...

lo que queria saber es como esta separandos esos datos en ese registro,
por espacio? guion? guion bajo? etc..
si es asi y necesitas saber las categorias de esa persona.........

usa array explode ( string separador, string cadena [, int limite] )
en donde en un array tendras los valores que tengas ahi, claro pones el separador que uses.

Código PHP:
<?php
// Ejemplo 1
$pizza  "trozo1 trozo2 trozo3 trozo4 trozo5 trozo6";
$trozos explode(" "$pizza);
echo 
$trozos[0]; // trozo1
echo $trozos[1]; // trozo2
ahora si tu problema es de estructura, huy.............
sabes que es una relacion 1-N
1-1, NXM?

cuando existe una relacion NxM tiene que haber una relacion intermedia...

www.mysql-hispano.org
ahi encontraran buena onfo
tambien en el foro de B.D encontraras en las FAQS.
por eso es bueno siempre leer las reglas para que los moderadores no cierren tu post o lo trasladen, jejej!
Sobre lo de la relación n a n abrí otro hilo en MySQL pero me lo borraron, no sé por qué razón, ahora he puesto otro aquí pero aun así sigo buscando la info por mi cuenta para ver si tengo suerte, es que debo ser cafre buscando.

Sobre la bd lo había echo separandolos con comas, pues así podía poner espacios entre medio y no limitaba las categorías a una palabra. De todas formas he visto que combinando php con MySQL necesito hacer lo de la relación por que si no no puedo hacer las búsquedas. Con LIKE %% no me vale por lo dicho antes, que me pilla todos los campos que contengan parte del número.

En cuanto sepa de que van las relaciones n a n busco la solución, reestructuro si hace falta y lo pongo por si a alguien le sirve.


Gracias por la ayuda.
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 15:18.