Foros del Web » Programando para Internet » PHP »

Buscar un array en un campo varchar

Estas en el tema de Buscar un array en un campo varchar en el foro de PHP en Foros del Web. Buenas, estoy programando un buscador para que busque una serie de palabras contenidas en un array en un campo varchar de una DB MySQL.EL problema ...
  #1 (permalink)  
Antiguo 23/01/2007, 10:55
 
Fecha de Ingreso: noviembre-2006
Mensajes: 146
Antigüedad: 17 años, 5 meses
Puntos: 1
Buscar un array en un campo varchar

Buenas, estoy programando un buscador para que busque una serie de palabras contenidas en un array en un campo varchar de una DB MySQL.EL problema es que no sé como hacer el mysql_query. He probado con foreach pero no se como pasarselo al query. He probado
Código PHP:
foreach ($mode as $value){
$result mysql_query("SELECT * FROM tabla WHERE tipo LIKE $type AND modo LIKE $mode[$value]"$link);

pero supongo que será un poco animalada porque no funciona :S
Otra duda que me ha surgido es que si cada vez que consulta una posición del array sobreescribe los resultados, como se podría hacer para que almacenara en $result todos los resultados formados por cada coincidencia del array con el campo varchar?
Gracias por adelantado
  #2 (permalink)  
Antiguo 23/01/2007, 11:35
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Buscar un array en un campo varchar

Pues podrías hacer uso del operador IN de mysql pasandole tu array como cadena, para eso utilizarías la función implode() de PHP de esta forma:

Código PHP:
<?php
$mode 
= array(); // aquí debes poner tu array
$con mysql_connect'servername''username''password' );
$db mysql_select_db'basededatos' );

$cadena implode"," $mode ); // suponiendo que $mode es tu array lo combertimos en cadena
$consulta "SELECT * FROM tabla WHERE modo In ( ".$cadena." )"// suponiendo que modo es el campo de busqueda en el que quieres encontrar las palabras que estan en tu array
$res mysql_query$res );
$num_res mysql_num_rows$res );

if ( !
$num_res )
{
   echo 
"No se obtuvieron resultados de la consulta";
   exit;
}
else
{
   while( 
$fila mysql_fetch_array$res ) )
   {
       
// aquí haces lo que quieras con los resultados devueltos por la
       // consulta haciendo refecencia a la variable $fila y poniendo el
       // nombre de tu campo dentro de los corchetes
       
echo $fila['nombre_campo']; 
   }
   
mysql_close$res );
}
?>
Espero sea lo que necesitabas o por lo menos te de una idea. Suerte
  #3 (permalink)  
Antiguo 23/01/2007, 12:27
 
Fecha de Ingreso: noviembre-2006
Mensajes: 146
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: Buscar un array en un campo varchar

No funciona... mysql_query(): supplied argument is not a valid MySQL-Link resource
He cambiado en el formulario el array por dos cadenas, pero a la hora de hacer el query me da el mismo error.
Código PHP:
foreach ($type as $value){
     foreach (
$mode as $value){
          
$result mysql_query("SELECT * FROM tabla WHERE tipo IN $type AND modo IN $mode"$link);
     }

Creo que el problema está con como paso las cadenas al query...
Alguna idea? Y sigo pensando si no se sobreescribirá $result cada vez que busque una posicion nueva en las cadenas?
Muchas gracias de todas formas. Seguiré trasteando a ver
  #4 (permalink)  
Antiguo 24/01/2007, 09:07
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Buscar un array en un campo varchar

Te mando ese error porque el operador IN sirve para devolver aquellos registros cuyo campo indicado( en nuestro caso modo ) coincide con alguno de los de la lista( $cadena ). Porque no pruebas el código tal y como te lo puse, te lo vuelvo a dar pero como un caso práctico:
Código PHP:
<?php 
// aquí debes poner tu array con las palabras a buscar yo puse estas pero puedes cambiarselas
$mode = array( 'es''la''los''este' );
// nos conectamos con el servidor
$con mysql_connect'servername''username''password' ); 
// seleccionamos la base de datos que bamos a utilizar
$db mysql_select_db'basededatos' ); 

// Combertimos en cadena nuestro array con ayuda de la función implode() con lo que la variable cadena contendrá ahora: "es, la, los, este"
$cadena implode"," $mode );
// hacemos la estructura de nuestra consulta con lo que el resultado sólo contendrá aquellos registros que contengan en el campo modo las palabras que están en la variable $cadena
$consulta "SELECT * FROM tabla WHERE modo In ( ".$cadena." )";
$res mysql_query$res ); 
$num_res mysql_num_rows$res ); 

if ( !
$num_res 

   echo 
"No se obtuvieron resultados de la consulta"
   exit; 

else 

   while( 
$fila mysql_fetch_array$res ) ) 
   { 
       
// no hay necesidad de hacer otro bucle ( en tu caso quieres hacer otro bucle for para hacer una consulta )
      // eso no es necesario ya que especificamos en la consulta que sólo queremos los registros que coincidan con las palabras que están en la variable $cadena
       
echo $fila['nombre_campo'];  
   } 
   
mysql_close$res ); 

?>
Con respecto a tu duda ¿como se podría hacer para que almacenara en $result todos los resultados formados por cada coincidencia del array con el campo varchar?. La respuesta ya la tienes en el código que te puse ya que la variable $res ya contiene los resultados como los necesitas.
Espero que ahora sí me hayas podido entender y que te haya servido esto para darte una idea.
P.D. Lee los comentarios que te puse en el código, son los que ves de color amarillo.
Suerte
  #5 (permalink)  
Antiguo 10/05/2007, 12:18
 
Fecha de Ingreso: mayo-2007
Mensajes: 1
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Buscar un array en un campo varchar

hola, me gusto mucho como explicaste el ejemplo, pero tengo una aplicación similar que tengo que hacer.., aunque bueno uso dreamweaver con php..

tengo en un campo los valores 1,2,3,4 estos los añadiria en la base de datos al usuario..

el buscador basicamente tendria que buscar a las personas que en el campo premios, tenga algun valor:
nombre= martin
premios= 1,3

nombre = carolina
premios = 2,4

nombre = miryam
premios = 1,4

SELECT *
FROM il_ilustres
WHERE nombre LIKE %colname1% AND premios_id IN (colname2)

por ejemplo busco nombre: m y premio = 1
el resultado deberia ser martin y miryam

alguna idea? guia como puedo armar la consulta?

cambio la forma de busqueda de un menu por unos checkboxes? aunque no he podido convenser al cliente...

saludos..

cana
  #6 (permalink)  
Antiguo 17/07/2007, 06:20
 
Fecha de Ingreso: junio-2007
Mensajes: 46
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Buscar un array en un campo varchar

y en el ejemplo de Erikfrancisco no puede ser que el error sea debido a esto?:

Código:
$res = mysql_query( $res );
no debería poner en esa linea esto?:

Código:
$res = mysql_query( $consulta );
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 09:29.