Foros del Web » Programando para Internet » PHP »

Problema con consulta de Mysql

Estas en el tema de Problema con consulta de Mysql en el foro de PHP en Foros del Web. Hola a todos! Estoy creando un pagina para hacer consultas a mi base de datos de Mysql, resulta que hice todo el codigo y despues ...
  #1 (permalink)  
Antiguo 09/01/2014, 21:26
 
Fecha de Ingreso: enero-2014
Ubicación: USA
Mensajes: 50
Antigüedad: 10 años, 3 meses
Puntos: 0
Problema con consulta de Mysql

Hola a todos!


Estoy creando un pagina para hacer consultas a mi base de datos de Mysql, resulta que hice todo el codigo y despues de muchos problemas lo hice andar, funciona perfecto con consultas a una tabla de mysql pero cuando quiero usar la clave foranea hago la consulta y no me aparece nada... Hago la misma consulta en el panel de Phpmyadmin y me dice que la busqueda arrojo 0 columnas, lo que quiero es que cuando el usuario ingrese en el campo el numero de serial aparezaca el producto y todos sus detalles. Agradezco la ayuda!



<head>
<title>SISTEMA DE REGISTRO DE PRODUCTOS CTE</title>
<style type="text/css">
#enviar {
text-align: right;
}
</style>
</head>

<body>
<form name="busquedas" method="POST" action="busqueda.php">
<table width="511" border="0" align="center">
<tr>
<th colspan="2" scope="col"><p>&nbsp;</p>
<p>SISTEMA DE CONTRO Y REGISTRO DE PRODUCTOS Y SERVICIOS</p>
<p>CTE </p>
<p>&nbsp;</p></th>
</tr>
<tr>
<td><label for="cedula"># Cliente</label></td>
<td><input type="text" name="busca" id="busqueda"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="submit" id="buscar" value="Buscar" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</form>

<?php

$busca = "";
$busca = $_POST['busca'];
mysql_connect("localhost", "andres","password");
mysql_select_db("cte");
if ($busca!=""){
$busqueda=mysql_query("SELECT * FROM clientes C INNER JOIN producto P ON C.serial = P.serial like '%".$busca."%'");
}
?>
<?php
while ($muestra=mysql_fetch_array($busqueda)){
//cliente es el la tabla de la base de datos
echo '<tr>';
echo '<td>' .$muestra['cliente'].'</td>';
echo '<td>' .$muestra['serial']. '</td>';
echo '<td>' .$muestra['cedula']. '</td>';
echo '<td>' .$muestra['email']. '</td>';
echo '<td>' .$muestra['barrio'].'</td>';
echo '<td>' .$muestra['telefono']. '</td>';
echo '<td>' .$muestra['producto']. '</td>';
echo '<td>' .$muestra['marca']. '</td>';
echo '<td>' .$muestra['almacen']. '</td>';
echo '<td>' .$muestra['dano'].'</td>';
echo '<td>' .$muestra['fecharecepcion']. '</td>';
echo '<td>' .$muestra['tecnico']. '</td>';
echo '<td>' .$muestra['estado']. '</td>';
echo '<td>' .$muestra['sede']. '</td>';
echo '<td>' .$muestra['entregaacliente']. '</td>';
echo '<td>' .$muestra['serial']. '</td>';


}

?>


</body>
</html>
  #2 (permalink)  
Antiguo 09/01/2014, 21:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con consulta de Mysql

Código SQL:
Ver original
  1. SELECT * FROM clientes C INNER JOIN producto P ON C.serial = P.serial LIKE '%algo%'

Te aseguro que si ejecutas esa consulta en PhpMyAdmin, en lugar de decirte que encontró cero coincidencias te dirá que hay un error, porque te falta WHERE nombre_de_campo antes de LIKE
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 09/01/2014, 21:56
 
Fecha de Ingreso: enero-2014
Ubicación: USA
Mensajes: 50
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Problema con consulta de Mysql

Gracias Triby por tu respuesta! Creo haber hecho lo que me sugeriste, pero aun sigo con el mismo problema. Hice esto:
SELECT * FROM clientes C INNER JOIN producto P ON C.serial = P.serial WHERE P.serial like '%"72788399"%'
Y el mensaje que obtengo es este:

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). ( La consulta tardó 0.0022 seg )
  #4 (permalink)  
Antiguo 09/01/2014, 23:55
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con consulta de Mysql

Si lo escribiste así en phpMyadmin:

Código MySQL:
Ver original
  1. SELECT * FROM clientes C INNER JOIN producto P ON C.serial = P.serial WHERE P.serial like '%"72788399"%'

Lo estás haciendo mal. Ya defines que se trata de una cadena al colocar las comillas simples antes y después de los signos de porcentaje, las comillas dobles están de más.

Debe ser así:

Código MySQL:
Ver original
  1. SELECT * FROM clientes C INNER JOIN producto P ON C.serial = P.serial WHERE P.serial LIKE '%72788399%'

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 10/01/2014, 05:18
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Problema con consulta de Mysql

Hola a todos.

Antes de nada, decirte lo que digo siempre, la extension mysql esta obsoleta, acostumbraos a trabajar con mysqli o pdo.

Por otro lado, has puesto esto
Cita:
$busqueda=mysql_query("SELECT * FROM clientes C INNER JOIN producto P ON C.serial = P.serial like '%".$busca."%'");
Te falta la variable de conexion:
mysql_query($sql, $conexion);
Es mejor que las sentencias sql, las hagas en una variable a parte, el codigo lo leeras mejor.

Por otro lado, no se porque no encuentra ningun resultado, quizas el problema este en la misma BBDD. Habria que hacer más pruebas.

Saludos.
  #6 (permalink)  
Antiguo 10/01/2014, 06:17
 
Fecha de Ingreso: enero-2014
Ubicación: USA
Mensajes: 50
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Problema con consulta de Mysql

Gracias a todos por sus recomendaciones y aportes todos fueron muy utiles. Finalmente con todas ellas pude resolver el problema, en primer lugar faltaba el where y en segundo estaba copiando el codigo de PHP con las comillas, lo corregi y ya me anda.

Muchismas gracias!!!
  #7 (permalink)  
Antiguo 10/01/2014, 06:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con consulta de Mysql

Ahora el único problema que te puede aparecer es que no te retorne lo que quieres ya que estas usando un LIKE contra un campo llamado serial (imagino que es un auto incremental)


Si buscas el registro con serial 72788399 debes usar "...WHERE P.serial=72788399..." o con la variable "...WHERE P.serial=".$busca

Puesto que si usas LIKE "%72788399%" te retornara

072788399
172788399
272788399
372788399
0727883990
1727883990
2727883990
3727883990
727883997278839972788399
...
CUALQUIER numero72788399CUALQUIER numero

Además la comparación LIKE es mucho mas ineficiente que =
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/01/2014 a las 06:37
  #8 (permalink)  
Antiguo 10/01/2014, 06:38
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, 5 meses
Puntos: 2658
Respuesta: Problema con consulta de Mysql

Las consultas por valores numéricos jamás se deben hacer con LIKE.
LIKE se usa para consultas por aproximación, y un número es una magnitud discreta, o como mucho un rango, pero no existe un número "parecido a". O es igual a, mayor, menor, próximo, o está entr. Pero no es "parecido".
La cláusula LIKE está optimizada para trabajar cadenas de caracteres, no con números.

Todo esto, sin dejar de lado, además, que poner "%loquesea%" es un espanto de consulta, porque pides todo lo que comience con cualquier cosa y termine con cualquier cosa.
¿Como logra realizar esa búsqueda la BBDD?
Simple: Lee absolutamente toda la tabla, sin usar índices (salvo que apliquen a otros campos), con lo que la performace de la query es un asco.
Es preferible poner el comodín al principio o al final, pero no en ambas partes.
Además hay que tener en cuenta algo clave: las personas habitualmente ponen a buscar palabras completas, los inicios de las palabas o los finales. Pero es muy extraño que alguien busque "rdenad" o "mput", si quiere encontrar "ordenador" o "computadora". ¿No les parece.
En cuanto a búsquedas por palabras intermedias, eso es buscar palabras intermedias, para lo cual los índices FULLTEXT son mejores, y no aplica LIKE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/01/2014 a las 06:43
  #9 (permalink)  
Antiguo 10/01/2014, 06:41
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problema con consulta de Mysql

Pero... si guardas el valor numérico como cadena de texto.. el número ya no es número, si no cadena.

Debería de ver realmente que es lo que quiere hacer, porque creo que quiere una comparación directa.

saludos
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #10 (permalink)  
Antiguo 10/01/2014, 06:46
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, 5 meses
Puntos: 2658
Respuesta: Problema con consulta de Mysql

En ese caso aplica lo dicho: O el principio, o el final. Pero no las dos partes.
¿O tu recuerdas mejor un teléfono por los números intermedios?
No, los recuerdas por característica o por terminación. Para pensar en los intermedios tu mente debe trabajar de más a fin de "recortar" los extremos, descartando lo que no necesitas. Te lleva más tiempo.
Bueno, la lógica de una computadora es parecida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 10/01/2014, 07:03
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Problema con consulta de Mysql

A colaborar.

Primero:

Cita:
$busca = "";
$busca = $_POST['busca'];
Te sobra el $busca = ""; ya que si el $_POST["busca"]; no devuelve nada se crea la cadena vacia.

Como dicen los compañeros, supongo que

Cita:
P ON C.serial = P.serial like '%".$busca."%'");
Sera de tipo numerico, si es asi, te va a dar errores seguro, ya que te va a devolver una infinidad de registros que no son los que tu quieres, creo.
Y si te das cuenta estas diciendo:

Une las tablas C y P en las que C.serial sea igual a P.serial ..... El LIKE '%$busca%' me parece que no esta bien puesto. ya que la sentencia de comparacion es C.serial = P.serial.

Creo que tienes modos mas simples de hacer lo que quieres.

Saludos.
  #12 (permalink)  
Antiguo 10/01/2014, 12:26
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problema con consulta de Mysql

Yo creo que para la variable lo mejor es:
Código PHP:
$busca '';

if(isset(
$_POST['field'])) {
    
$busca striptags($busca);

__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #13 (permalink)  
Antiguo 10/01/2014, 13:35
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Problema con consulta de Mysql

O.O y que valor recojes con field????

Nunca lo habia visto asi, yo creo que lo mejor es

if($_POST["busca"] != ""){
//Aqui todo el codigo. Si el valor pasado esta en blanco no ejecuta nada.
}

Es una opcion, aunque lo mejor es realizar un codigo mediante javascript en el que al enviar un formulario compruebe si el campo esta relleno, si no lo está que lance error y no permita seguir.
  #14 (permalink)  
Antiguo 10/01/2014, 15:10
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Problema con consulta de Mysql

Buenas de nuevo,

"field" es el alias para el campo real... evidentemente si se llama buscar, pues es buscar y no field.

Este código era para el tema de comprobar si el campo viene o no. Evidentemente si no se después se haría la comprobación directamente con la variable, por ejemplo:

Código PHP:
if(!empty($busca)) {
//código restante

Y ojo, es un "error" hacerlo directamente así:

Código PHP:
if($_POST['busca']) { ... } 
Ya que, que pasa si accedo al fichero directamente por la url, o simplemente hago el envío del formulario sin ese campo "que se puede eliminar desde cliente" ???

Daría un Warning, ya que ese campo no existe, por lo contrario, con:

Código PHP:
if(isset($_POST['busca'])) { ... } 
Comprobamos que se campo existe en la matriz POST

saludos!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #15 (permalink)  
Antiguo 11/01/2014, 02:20
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Problema con consulta de Mysql

Ya me extrañaba, al principio pense que field era el campo, pero por si las moscas :P

Saludos.

Cita:
Y ojo, es un "error" hacerlo directamente así:

Código PHP:
if($_POST['busca']) { ... }
Ya que, que pasa si accedo al fichero directamente por la url, o simplemente hago el envío del formulario sin ese campo "que se puede eliminar desde cliente" ???

Daría un Warning, ya que ese campo no existe, por lo contrario, con:

Código PHP:
if(isset($_POST['busca'])) { ... }
Tienes razon.

Etiquetas: html, mysql, registro, select, sql, tabla
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 02:23.