Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ayudita con esta consulta

Estas en el tema de Ayudita con esta consulta en el foro de Mysql en Foros del Web. Tengo este codigo sencillo, el cual quiero q busque obviamente si escribo un nombre me bota todoo pero sino escribo nada creo q no arrija ...
  #1 (permalink)  
Antiguo 18/09/2010, 23:13
 
Fecha de Ingreso: enero-2010
Mensajes: 302
Antigüedad: 14 años, 3 meses
Puntos: 3
Exclamación Ayudita con esta consulta

Tengo este codigo sencillo, el cual quiero q busque obviamente si escribo un nombre me bota todoo pero sino escribo nada creo q no arrija nada, necesito ayuda con la busqueda, y si fuera posible que alguien me ayudara a colocar que cuando escriba un dato me busques en la tabla ese dato sin importar la cantidad de registros y si es posible me dijera la cantidad de resultados o registros con ese valor
Código PHP:
<?php
session_start
();
if(isset(
$_SESSION['llave'])){
    function 
contenido(){
        
?>
        <form name="empleados" id="empleados" action="buscar.php" method="get">
            
            <div align="center">
              <p>&nbsp;</p>
              
              <p>Nombre: 
                <input type="text" name="nombre" id="nombre" value="<?php echo $_GET['nombre']; ?>"> 
                <br />
                <input type="submit" value="Buscar">
                </p>
          </div>
</form>
        <?php
        
if (isset($_GET['nombre'])){
            
$link=mysql_connect("localhost""root""") or die("imposible conectar");
            
mysql_select_db("ejemplodb"$link);
            
            
$consulta="SELECT * FROM Tc02Empleados WHERE Tc02Nombres LIKE '%{$_GET['nombre']}%'";
            
$res=mysql_query($consulta$link);        
            
?>
            <br />
            
            <table border="1">
<tr>
                    <td># Reg</td>
                  <td>Nombre</td>
                    <td>Apellido</td>
                    <td>Sexo</td>
                    <td>cedula</td>
                    <td>Fecha Nac</td>
                    <td>Direccion</td>
                </tr>
            <?php
            
while($datos=mysql_fetch_row($res)){
                echo 
"<tr>";
                echo 
"<td>{$datos[0]}</td>";
                echo 
"<td>{$datos[1]}</td>";
                echo 
"<td>{$datos[2]}</td>";
                echo 
"<td>{$datos[3]}</td>";
                echo 
"<td>{$datos[4]}</td>";
                echo 
"<td>{$datos[6]}</td>";
                echo 
"<td>{$datos[7]}</td>";
                echo 
"<td><a href=\"empleados.php?codigo={$datos[0]}&op=editar\">Editar</a> <br /> <a href=\"?codigo={$datos[0]}&op=borrar\">Borrar</a></td>";
                echo 
"</tr>";
            }
            
?>
            </table>
<?php    
        
}
    }
    include (
"plantilla.php");
}
else{
    
header("location: index.php?error=no inicio sesion correctamente");
}

?>
  #2 (permalink)  
Antiguo 18/09/2010, 23:19
 
Fecha de Ingreso: enero-2010
Mensajes: 302
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Ayudita con esta consulta

La tabla se llama "Tc02Empleados" y estos son sus campos " Tc02NumReg - Tc02Nombres - Tc02Apellidos - Tc02Sexo - Tc02Cedula - Tc02FechaNac - Tc02Ciudad - Tc02Direccion - Tc02Telefono - Tc02EstCivil - Tc02Hijos -Tc02Nivel - Tc02Profesion - Tc02Experiencia - Tc02Ocupacion - Tc02Email " agradezco la ayuda, estos campos serian que cuando digitara cual cosa me saliera todo lo referente a lo q escribo y si es posible q me ayudaran colocando la cantidad de registros q encontro la consulta gracias

SE QUE ES MUCHO PEDIR PERO LO NECESITAMOS PARA DONAR EL PROGRAMA A UNA PUEBLO Y PUEDAN LLEVAR SU INFORMACION DE UNA FORMA MAS ORGANIZADA GRACIAS
  #3 (permalink)  
Antiguo 19/09/2010, 07:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ayudita con esta consulta

En cuanto a la sentencia que se debe usar, si la búsqueda debe hacerse sobre varios campos al mismo tiempo, es mejor primero ver qué campos son los que se usarán para buscar, porque el resultado y la dificultad de crear la sentencia variarán enormemente según el caso:
- Si el dato a buscar es de tipo alfanumérico, por ejemplo, no tiene sentido invocar campos de fecha, numéricos o booleanos. Esto ya nos permite reducir las posibilidades a sólo campos de caracteres, textos o enum.
- Si el tipo de datos es numérico puede que sólo nos interesen los campos numéricos. Pero si ese numero corresponde a cualquier cosa, sólo quedan fuera los booleanos o de fecha.
- Si son de fecha, puede que sólo queden los de fecha, o si la fecha puede estar en un texto, habrá que incluir todos los campos cuya longitud sea mayor o igual a 8 (longitud de una fecha).

Como verás, esto puede implicar que debas crear más de una sentencia a usar, usando aquella que se ajuste mejor a la búsqueda a realizar.
Usar una sola sentencia puede terminar siendo sumamente ineficiente. No existen sentencias genéricas que sean óptimas para ningún tipo de bases de datos. Yo tengo aplicaciones que sólo tienen 12 tablas y usan más de 50 tipos de construcciones de sentencias diferentes, simplemente para consultar los datos de diferentes formas.

Mientras precisa sea la creación de la consulta, incluso si esta es variable, más eficientes se vuelven las consultas.

Finalmente, en cuanto a la sentencia misma, para tu caso no es LIKE lo mejor que puedes usar, sino las búsquedas de texto completo, que te pueden devolver un conjunto de registros donde aparece lo buscado, jerarquizados de mayor relevancia a menor relevancia. Es el caso de las funciones de búsqueda de texto completo (Full-Text), que tiene esta forma:
Cita:
MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
que tiene, por ejemplo este uso:

Código MySQL:
Ver original
  1. SELECT * FROM articles
  2. WHERE MATCH (title,body) AGAINST ('database');
En este caso, en MATCH van las columnas contra las que se realizará la busqueda.

Esta forma tiene dos limitaciones:
1) Sólo funciona cuando se crean índices FULLTEXT, por ejemplo:
Código MySQL:
Ver original
  1. mysql> CREATE TABLE articles (
  2.     ->   title VARCHAR(200),
  3.     ->   body TEXT,
  4.     ->   FULLTEXT (title,body);
2) Sólo se pueden crear estos índices en tablas de tipo MyISAM. Las InnoDB no sirven.

Prueba el caso y veremos a partir de allí.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/09/2010, 13:56
 
Fecha de Ingreso: enero-2010
Mensajes: 302
Antigüedad: 14 años, 3 meses
Puntos: 3
Respuesta: Ayudita con esta consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En cuanto a la sentencia que se debe usar, si la búsqueda debe hacerse sobre varios campos al mismo tiempo, es mejor primero ver qué campos son los que se usarán para buscar, porque el resultado y la dificultad de crear la sentencia variarán enormemente según el caso:
- Si el dato a buscar es de tipo alfanumérico, por ejemplo, no tiene sentido invocar campos de fecha, numéricos o booleanos. Esto ya nos permite reducir las posibilidades a sólo campos de caracteres, textos o enum.
- Si el tipo de datos es numérico puede que sólo nos interesen los campos numéricos. Pero si ese numero corresponde a cualquier cosa, sólo quedan fuera los booleanos o de fecha.
- Si son de fecha, puede que sólo queden los de fecha, o si la fecha puede estar en un texto, habrá que incluir todos los campos cuya longitud sea mayor o igual a 8 (longitud de una fecha).

Como verás, esto puede implicar que debas crear más de una sentencia a usar, usando aquella que se ajuste mejor a la búsqueda a realizar.
Usar una sola sentencia puede terminar siendo sumamente ineficiente. No existen sentencias genéricas que sean óptimas para ningún tipo de bases de datos. Yo tengo aplicaciones que sólo tienen 12 tablas y usan más de 50 tipos de construcciones de sentencias diferentes, simplemente para consultar los datos de diferentes formas.

Mientras precisa sea la creación de la consulta, incluso si esta es variable, más eficientes se vuelven las consultas.

Finalmente, en cuanto a la sentencia misma, para tu caso no es LIKE lo mejor que puedes usar, sino las búsquedas de texto completo, que te pueden devolver un conjunto de registros donde aparece lo buscado, jerarquizados de mayor relevancia a menor relevancia. Es el caso de las funciones de búsqueda de texto completo (Full-Text), que tiene esta forma:

que tiene, por ejemplo este uso:

Código MySQL:
Ver original
  1. SELECT * FROM articles
  2. WHERE MATCH (title,body) AGAINST ('database');
En este caso, en MATCH van las columnas contra las que se realizará la busqueda.

Esta forma tiene dos limitaciones:
1) Sólo funciona cuando se crean índices FULLTEXT, por ejemplo:
Código MySQL:
Ver original
  1. mysql> CREATE TABLE articles (
  2.     ->   title VARCHAR(200),
  3.     ->   body TEXT,
  4.     ->   FULLTEXT (title,body);
2) Sólo se pueden crear estos índices en tablas de tipo MyISAM. Las InnoDB no sirven.

Prueba el caso y veremos a partir de allí.
Son solo campos de solo letras y un campo que seria el de la cedula o identificacion, voy a probar a ver que pasa gracias, pero en si lo que busco es buscar solo informacion tipo texto y numerico, los campos en donde se buscaria la informacion seria en " Tc02Nombres - Tc02Apellidos - Tc02Cedula" esos tres si alguien me podria ayudar con esa parte gracias

Última edición por Sofmundi; 19/09/2010 a las 14:03
  #5 (permalink)  
Antiguo 20/09/2010, 09:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ayudita con esta consulta

Primero debes decirnos qué motor de base estás usando, si MyIsam o InnoDB. Dependiendo de eso, podremos hacerte una u otra sugerencia.
  #6 (permalink)  
Antiguo 22/09/2010, 11:22
 
Fecha de Ingreso: enero-2010
Mensajes: 302
Antigüedad: 14 años, 3 meses
Puntos: 3
Exclamación Respuesta: Ayudita con esta consulta

Es Misam el motor de base de datos

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 19:12.