Foros del Web » Programando para Internet » PHP »

Buscar en todos los campos simulteneamente.

Estas en el tema de Buscar en todos los campos simulteneamente. en el foro de PHP en Foros del Web. Hola Estoy intentando buscar un texto en todos los campos de una tabla, pero no consigo hacerlo de una manera sencilla. Creo que el código ...
  #1 (permalink)  
Antiguo 11/06/2002, 07:07
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 15 años, 8 meses
Puntos: 0
Buscar en todos los campos simulteneamente.

Hola


Estoy intentando buscar un texto en todos los campos de una tabla, pero no consigo hacerlo de una manera sencilla.

Creo que el código se debería de parecer a este:
Código:
 SELECT * FROM mi_tabla WHERE * LIKE $texto

¿Alguien puede ayudarme?

  #2 (permalink)  
Antiguo 11/06/2002, 07:36
 
Fecha de Ingreso: febrero-2002
Mensajes: 127
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Buscar en todos los campos simulteneamente.

Hola. Yo pondría lo siguiente:
SELECT * FROM mi_tabla WHERE campo1 LIKE '".$texto."' OR campo2 LIKE '".$texto."' OR etc
De esta manera te seleccionará los registros donde alguno de los campos tenga ese texto.
Ten en cuenta que el select te devuelve filas enteras, NO campos de esta forma con que haya un campo que sea = $texto te devolverá toda la fila.
Un saludo

Val Muñoz de Bustillo.<BR>
Todo sobre DHTML y javascript en <A HREF="http://www.iespana.es/topscripts">TopScripts</A>
  #3 (permalink)  
Antiguo 11/06/2002, 10:51
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 15 años, 8 meses
Puntos: 0
Re: Buscar en todos los campos simulteneamente.

Gracias por tu respuesta.

Pero lo que pasa es que es un poco 'sucio' el tener que escribir todos los campos de la tabla.

¿No hay una forma más elegante de hacerlo?

  #4 (permalink)  
Antiguo 29/01/2005, 14:08
 
Fecha de Ingreso: enero-2005
Mensajes: 4
Antigüedad: 12 años, 10 meses
Puntos: 0
Que tal!

Yo utilizo una funcion para realizar la consulta de una tabla completa (con o sin filtros), por cierto agradezco la ayuda de este foro para realizarla, espero les sirva:

//************************************************** *****************************
Function ConsultaCatalogo ($Tabla, $Where,
$Usuario, $Password,
&$Array, &$Registros,
&$Cabecera, &$Columnas)
{
$Servidor = "localhost";
$BaseDatos= "Prueba";

/* Conecta al servidor con el usuario y contrase;a de paso */
$Conexion = mysql_connect ($Servidor, $Usuario, $Password);
IF (!$Conexion)
{
echo "Error conectando a la base de datos.";
RETURN FALSE;
}

/* Seleccionamos la base de datos que nos interesa */
IF (!mysql_select_db ($BaseDatos, $Conexion))
{
echo "Error seleccionando la base de datos.";
mysql_close ($Conexion);
RETURN FALSE;
}

/* Obtiene el catalogo */
$sql = "SELECT * FROM ".$Tabla." ".$Where.";";
$Result = mysql_query ($sql);
IF (!$Result)
{
echo "La siguiente consulta contiene algun error:<br>\nSQL: <b>$sql</b> ";
mysql_close ($Conexion);
RETURN FALSE;
}

/* Obtiene el numero de registros leidos */
$Registros = mysql_num_rows ($Result);

/* Obtiene el numero de columnas leidas en la consulta */
$Columnas = mysql_num_fields ($Result);
$i = 1;
WHILE ($Row = mysql_fetch_Array ($Result))
{
$Array [$i] = $Row;
$i++;
}
$RecordsetSelect = mysql_query ($sql);
$row_Recordset1 = mysql_fetch_assoc ($RecordsetSelect);
$i = 1;
while (list ($key, $val) = each ($row_Recordset1))
{
$Cabecera [$i] = $key;
$i++;
};
mysql_free_result($RecordsetSelect);
mysql_free_result ($Result);
mysql_close ($Conexion);
RETURN TRUE;
}
//************************************************** *********************************************


Donde:
/*****************************************
FUNCTION CONSULTACATALOGO:
Ejecutar:
Funcion encargada de realizar una consulta DE UN CATALOGO A LA BASE DE DATOS
Recibe:
$Tabla: Query a ejecutar.
$Where: Condiciones de consulta.
$Usuario: Usuario con el que se realiza la conexion a la BD.
$Password: Contrase;a con la que se conecta a la BD.
$Array: Arreglo donde retornara todos los valores de la consulta
$Registros: Numero de registros leidos
$Cabecera: Arreglo donde regresara el nombre de cada columna
$Columnas: Numero de columnas leidas

Para utilizarse se ejecuta lo siguiente:

ConsultaCatalogo ("Usuario", "IdUsuario NOT IN (1, 3)", "usrpass", "usrpass",
&$Array, &$Registros,
&Cabecera, &$Columnas);

Para realizar una lectura de los datos leidos:
For ($j = 1; $j <= $Columnas; $j++)
{
echo "<P>".$Cabecera [$j}."<P>";
}
echo "<BR>";
For ($i = 1; $i <= $Registros; $i++)
For ($j = 1; $j <= $Columnas; $j++)
{
echo $Array [$i}[$Cabecera [$j]];
}
******************************************/

Regresando a tu duda, si quieres consultar:
SELECT * FROM mi_tabla WHERE Campo1 LIKE $texto

deberas de llamar la funcion asi:

IF (ConsultaCatalogo ('mi_tabla', "campo1 like \"texto%\"", 'user', 'pass', $Tabla, $Registros, $Cabecera, $Columnas))
{
//Aqui se hace la impresion de la lectura.
// Empezamos con el encabezado.
echo "<tr> \n";
FOR ($NumCab = 1; $NumCab <= $Columnas; $NumCab++)
echo " <TD> ".$Cabecera [$NumCab}." </td> \n";
echo "</tr>\n";

// Ahora realizamos la escritura de los registros leidos.

/* Contador de registros en el catalogo */
FOR ($Reg = 1; $Reg <= $Registros; $Reg++)
{
echo "<tr>\n";
FOR ($NumCab = 1; $NumCab <= $Columnas; $NumCab++)
echo " <td> ".$Array [$Reg][$Cabecera [$NumCab]]." </td> \n";
echo "</tr>\n";
}
}

************************************************** *********/

Lamentablemente esto NO funciona si la tabla esta vacia, esto significa que la tabla al menos debe de tener un registro para que funcione!

Pero les prometo ponerme a trabajar en este punto e investigar como le podemos hacer para que jale, por cierto, si alguien tiene una critica o comentario del codigo, es bienvenido (yo tengo nada mas 3 meses trabajando con PHP, asi que aun no me se muchos trucos!

Última edición por oxido_social; 29/01/2005 a las 14:09
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.