Foros del Web » Programando para Internet » PHP »

Buscador sobre varias tablas

Estas en el tema de Buscador sobre varias tablas en el foro de PHP en Foros del Web. Hola a todos. Tengo una base de datos con 42 tablas, y desea realizar una búsqueda sobre todos en su conjunto. La idea es la ...
  #1 (permalink)  
Antiguo 14/10/2006, 05:10
 
Fecha de Ingreso: octubre-2003
Mensajes: 280
Antigüedad: 20 años, 6 meses
Puntos: 1
Buscador sobre varias tablas

Hola a todos.

Tengo una base de datos con 42 tablas, y desea realizar una búsqueda sobre todos en su conjunto. La idea es la siguiente:
Tendré un único campo de texto donde escribir una palabra. Buscará sobre todas las bases de datos, y me devolverá la base de datos donde se encuentra y el campo en que se encuentra lo devolverá entero, y la palabra introducida en negritga.

¿Como se haria esto?

Un saludo.
  #2 (permalink)  
Antiguo 14/10/2006, 08:00
Avatar de elfran222  
Fecha de Ingreso: junio-2006
Mensajes: 550
Antigüedad: 17 años, 10 meses
Puntos: 7
q tipos de bases de datos son?
  #3 (permalink)  
Antiguo 14/10/2006, 12:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Sé que me salgo del tema .. pero no entiendo como tienes "42" tablas .. será que tienes un -mal- diseño de tu modelo de datos poco normalizado (o nada?)

Si no explicas un poco tu modelo de datos no es muy factible darte más orientación al respecto.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 15/10/2006, 04:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 280
Antigüedad: 20 años, 6 meses
Puntos: 1
La base de datos es mysql. Explico como está estructurada la base de datos.

Es una base de datos correspondiente a un departamento de una universidad. Hay una para los profesores, otra para las asignaturas, practicas de laboratorio, etc...

Y me gustaria hacer una busqueda en todas ellas.
  #5 (permalink)  
Antiguo 15/10/2006, 09:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Ok, pero esa explicación no es suficiente.

Vamos a ver .. Lo lógico sería que tus tablas guardasen alguna relación entre ellas ¿la guardan? o son idenpenditenes?

Tu sabes sobre que campos de todas las tablas vas a buscar? .. supongo que no serán en todos ..

Así como planteas tu problema .. lo primero sería hacer una busqueda de todas las tablas y campos en todas tus Base de datos. Creo que es no es lo óptimo .. En cualquier caso en SQL tienes funciones para que te entreguen los nombres de tablas de una BBDD dada y también sus campos.

Tienes funciones como:


mysql_list_tables()
http://www.php.net/manual/en/functio...ist-tables.php

Para ver las tablas que tiene una BBDD dada ...

mysql_field_table()
http://www.php.net/manual/en/functio...ield-table.php

que te devuelven en que tabla de una consulta SQL está el resultado obtenido .. Similar función para ver el campo ... etc.

Se trata de que priimero veas que tablas tiene tu base de datos .. que campos y ahí armes tu consulta SQL .. A no ser que sepas claro ya sobre que campos buscar (esto es lo más sano). Por otro lado hay busquedas tipo "Full text search" que ayudan en este proceso.

Más info:
www.php.net/mysql

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 15/10/2006, 09:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Por cierto .. en los comentarios de los usuarios de esas funciones tienes ejemplos como:

Cita:
User Contributed Notes
mysql_list_tables
arturclemente at gmail dot com
03-Apr-2006 04:09
Código PHP:
<?php

   
// Search any world in entire database

   
set_time_limit(0);

   
$database 'embratur';
   
$word 'tempo';
   
   echo 
"Search for word: <b>".$word."</b><br><br>";
   
   
$connect mysql_connect('localhost','root','123456');
   
mysql_selectdb$database$connect );
   
   
$j=0;
   
$tables mysql_list_tables$database );
   
   while( 
$line mysql_fetch_row$tables ) )
   {
       
$fields mysql_list_fields$database$line[0], $connect );
       
$columns mysql_num_fields$fields );
       
       for (
$i 0$i $columns$i++) {
               
$nomField mysql_field_name$fields$i );
           
$sql "SELECT ".$nomField." FROM " $line[0] .
               
" WHERE " .
                   
$nomField " LIKE '%".$word."' LIMIT 1";
           
           
$query mysql_query$sql );
           if( 
mysql_num_rows$query ) > 0)
           {
               
$result mysql_fetch_array$query );
               echo 
"Table: <b>".$line[0]."</b><br>";
               echo 
"Field: <b>".$nomField."</b><br>";
               echo 
"SQL: <b>".$sql."</b><br>";
               echo 
"Result: <b>" str_replace$word"<font color='blue'>"$word "</font>"$result[0] ) . "</b>";
               echo 
"<br><br>";
               
$j++;
           }
       }
   }
   echo 
"<br><br><br>";    
   echo 
"Results: ".$j;
   
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 12:28.