Foros del Web » Programando para Internet » PHP »

problemas con una consulta

Estas en el tema de problemas con una consulta en el foro de PHP en Foros del Web. hola que tal??? les cuento mi problema a ver si me pueden ayudar, no creo que sea nada complicado, solo que despues de 7 horas ...
  #1 (permalink)  
Antiguo 28/06/2010, 08:34
 
Fecha de Ingreso: junio-2010
Mensajes: 155
Antigüedad: 13 años, 9 meses
Puntos: 0
problemas con una consulta

hola que tal??? les cuento mi problema a ver si me pueden ayudar, no creo que sea nada complicado, solo que despues de 7 horas de programar ya tengo la cabeza destruida y no se me ocurre mas nada ajja

Necesito implementar un buscador en mi pagina. Se ingresan palabras clave en un campo de texto, y tengo que sacar de la base de datos las filas en las que esas palabras ingresadas se encuentren TODAS en un campo de tipo TEXT en la tabla

Ya tengo las palabras ingresadas metidas por separado en un array, y probé usando LIKE y WHERE_IN pero no me funciona.

Uso codeigniter q soporta active record.

Alguien me podria decir mas o menos como seria la consulta para este caso??? yo creo que seria algo parecido a:

Código:
$this->db->like('campo','$array_palabras');
    
    $query = $this->db->get('tabla');
desde ya muchas gracias ;)
  #2 (permalink)  
Antiguo 28/06/2010, 09:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: problemas con una consulta

Con Codeigniter no sabría indicarte pero en MySQL cuando quieras buscar una palabra dentro de un texto solo tienes que usar LIKE
Código MySQL:
Ver original
  1. SELECT * FROM tabla WHERE columna LIKE '%foo%'
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 28/06/2010, 10:52
 
Fecha de Ingreso: junio-2010
Mensajes: 155
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problemas con una consulta

si eso ya lo se abi, el tema es que tengo que ver que TODAS las palabras del arreglo esten dentro del campo que quiero buscar, por eso no se si hay una funcion que te permita hacerlo directamente con un arreglo, o habrá que hacer una consulta por cada palabra del arreglo y unirlas mediante un AND, y no se como hacer eso.

A alguien se le ocurre algo???

gracias igual por tu respuesta
  #4 (permalink)  
Antiguo 28/06/2010, 11:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: problemas con una consulta

A ver si te entendí. Si quieres saber si TODAS las palabras están en una columna, es decir vamos a suponer que tengo una tabla llamada bar y una columna llamada candy y en esa columna estos textos
Cita:
foo, bar, baz, candy
bar, candy
baz, foo
foo, candy
Y quiero hacer una consulta, verificando los que lleven foo, candy solamente, lo puedo hacer así
Código MySQL:
Ver original
  1. SELECT candy FROM  bar WHERE candy LIKE  '%foo%candy%'
Eso me dará los resultados
Cita:
foo, bar, baz, candy
foo, candy
Si eso no es lo que quieres, podrías postear mejor un ejemplo como el que yo te coloqué para que te puedan indicar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 28/06/2010, 11:42
 
Fecha de Ingreso: junio-2010
Mensajes: 155
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problemas con una consulta

no no seria asi, a ver si me explico mejor.

En mi tabla tengo un campo de texto de mucha longitud, que puede ser algo asi como:

"Esto es lo que tiene mi campo en la tabla, como verás puede ser un texto muyyyyy pero muyyyyyyyyy largo"

ahora suponete que tengo un arreglo con los elementos 'esto','tabla' y 'muyyyyy', yo necesito buscar en mi tabla las filas que en ese campo contengan todas las palabras del arreglo, si encuentra todas me devuelve eso, y si solo aparecen algunas palabras no la considera, me entendes ahora???

ahi mas o menos llegue a esto y me funciona:
Código:
for ($i = 0; $i <= count($arreglo_palabras); $i++) {
        $this->db->like('campo',$arreglo_palabras[$i]);
    }

   $query = $this->db->get('tabla');
Esto me devuelve exactamente lo que quiero, pero al principio me tira un error que no se a que se debe:

A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 8 (8 es la cantidad de palabras en el arreglo)
Filename: controllers/tuespacio.php
Line Number: 59

La linea 59 es la que tiene:
$this->db->like('campo',$arreglo_palabras[$i]);

alguien sabe a que puede deberse eso y como eliminar ese error?


ah y si sirve de ayuda, sobre la linea del error me aparecen estas que creo que son sugerencias porque tienen un foquito prendido:
Código:
*assign return value to new variable (cuando le doy a esto me crea una nueva variable y le asigna toda la linea 59)
*Create Field "public $db = "";" in Class "Tuespacio" (tuespacio.php)    (tuespacio se llama mi controlador)
*Customize Hints in options dialog (esto no se para que sirve)

Última edición por walrus86; 28/06/2010 a las 11:57
  #6 (permalink)  
Antiguo 28/06/2010, 11:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: problemas con una consulta

Ok, lo que te indiqué es exactamente lo que quieres, devolverte las líneas que contengan exactamente lo que le estás pidiendo en un arreglo, solo que debes unirlo y entre cada palabra añadir el simbolo %. Ahora el error que te dice es un problema de que anteriormente alguna variable no la iniciaste. Esto puede ser intencional y tiene que ver con la parte del php.ini en la directiva error_reporting. Si no quieres que te dé las "errores" de nota, puedes modificarlo, ya que puede ser intencional el no iniciar una variable. En esa directiva (error_reporting) tienes que colocar ~E_NOTICE
Código ini:
Ver original
  1. error_reporting = E_ALL & ~E_NOTICE
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 28/06/2010, 12:02
 
Fecha de Ingreso: junio-2010
Mensajes: 155
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problemas con una consulta

por dios pero que cosa mas rara, cambié el for por un while y el problema desapareció, ya esta todo solucionado :D

1000 gracias por su ayuda

hasta la próxima

Etiquetas: Ninguno
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:35.