Búsqueda de varias tablas php+mysql

Amigo resulta que estoy realizando una consulta, La idea es buscar la palabra que introduce alguien desde un formulario.
Estoy usando el like pero no me quiere funcionar por ningún lado, ¿es tan amable y me regala una mano para poder hacer la consulta? Aquí le envío el código que estoy desarrollando, le agradezco por su atención:
<?
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
$txt_criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
//WHERE noticias.titulo LIKE '%$busqueda%' OR noticias.titulo like '%$busqueda%' OR novedades.titulo like '%$busqueda%' BY noticias.id desc
$criterio = "where a.PLU like '%" . $txt_criterio . "%' or a.ProNombrComer like '%" . $txt_criterio . "%' or b.CatNombre like '%" . $txt_criterio . "%' or c.SubNombre like '%" . $txt_criterio . "%' or d.PrvNombre like '%" . $txt_criterio . "%' or VecFecha like '%" . $txt_criterio . "%'";
}
$sql="SELECT a.PLU, a.ProNombrComer, b.CatNombre, c.SubNombre, d.PrvNombre, DATE_FORMAT(VecFecha,'%d/%m/%Y') AS VecFecha
from elipsis_productos a inner join elipsis_subcategorias c on a.SubCodigo = c.SubCodigo
inner join elipsis_categorias b on b.CatCodigo = c.CatCodigo
inner join elipsis_prvproalm f on a.ProCodigo = f.ProCodigo
inner join elipsis_ventas g on f.ProCodigo = g.ProCodigo
inner join elipsis_vencimientos e on e.VenCodigo = g.VenCodigo
inner join elipsis_proveedores d on f.PrvCodigo = d.PrvCodigo" . $criterio;
$res=mysql_query($sql) or die(mysql_error());
$numeroRegistros=mysql_num_rows($res);
if($numeroRegistros<=0)
{
echo "
<div align='center'>";
echo "<font face='verdana' size='-2'>No se encontraron resultados</font>";
echo "</div>
";
}else{
//////////elementos para el orden
if(!isset($orden))
{
$orden="a.PLU";
}
//////////fin elementos de orden
//////////calculo de elementos necesarios para paginacion
//tamaño de la pagina
$tamPag=2;
//pagina actual si no esta definida y limites
if(!isset($_GET["pagina"]))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$pagina = $_GET["pagina"];
}
//calculo del limite inferior
$limitInf=($pagina-1)*$tamPag;
//calculo del numero de paginas
$numPags=ceil($numeroRegistros/$tamPag);
if(!isset($pagina))
{
$pagina=1;
$inicio=1;
$final=$tamPag;
}else{
$seccionActual=intval(($pagina-1)/$tamPag);
$inicio=($seccionActual*$tamPag)+1;
if($pagina<$numPags)
{
$final=$inicio+$tamPag-1;
}else{
$final=$numPags;
}
if ($final>$numPags){
$final=$numPags;
}
}
//////////fin de dicho calculo
//////////creacion de la consulta con limites
$sql="SELECT a.PLU, a.ProNombrComer, b.CatNombre, c.SubNombre, d.PrvNombre, DATE_FORMAT(VecFecha,'%d/%m/%Y') AS VecFecha
from elipsis_productos a inner join elipsis_subcategorias c on a.SubCodigo = c.SubCodigo
inner join elipsis_categorias b on b.CatCodigo = c.CatCodigo
inner join elipsis_prvproalm f on a.ProCodigo = f.ProCodigo
inner join elipsis_ventas g on f.ProCodigo = g.ProCodigo
inner join elipsis_vencimientos e on e.VenCodigo = g.VenCodigo
inner join elipsis_proveedores d on f.PrvCodigo = d.PrvCodigo".$criterio." ORDER BY ".$orden.",a.PLU ASC LIMIT ".$limitInf.",".$tamPag;
$res=mysql_query($sql) or die(mysql_error());
mysql_close();
/*while ($row1 = mysql_fetch_array($result)){
$respuesta.= "&fecha$i=".date_format($row['VecFecha'],'%d/%m/%Y');
$respuesta.= "&body$i++=".$row1['body'];
}
echo $respuesta;*/
//////////fin consulta con limites
echo "
<div align='center'>";
echo "<font face='verdana' size='-2'>encontrados ".$numeroRegistros." resultados<br>";
echo "ordenados por <b>".$orden."</b>";
if(isset($txt_criterio)){
echo "<br>Valor filtro: <b>".$txt_criterio."</b>";
}
echo "</font></div>
";
echo "
<table align='center' width='80%' border='0' cellspacing='1' cellpadding='0'>
";
echo "
<tr>
<td colspan='3'>
<hr noshade>
</td>
</tr>
";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=PLU&criterio=".$txt_criterio."'>Plu</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=ProNombrComer&criterio=".$txt_criterio."'>Nombre Comercial</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=CatNombre".$txt_criterio."'>Nombre Categoria</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=SubNombre&criterio=".$txt_criterio."'>Nombre Subcategoria</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=PrvNombre&criterio=".$txt_criterio."'>Proveedor</a></th>";
echo "<th bgcolor='#CCCCCC'><a class='ord' href='".$_SERVER["PHP_SELF"]."?pagina = ".$pagina."&orden=VecFecha&criterio=".$txt_criterio."'>Fecha Vencimiento</a></th>";
while($row=mysql_fetch_array($res))
{
?>
<!-- tabla de resultados -->
<tr bgcolor="#CC6666" onMouseOver="this.style.backgroundColor='#FF9900';this.style.cursor='hand';" onMouseOut="this.style.backgroundColor='#CC6666'"o"];" onClick="javascript:muestra('<? Echo "[".$row["a.PLU"]."] ".$row["a.ProNombrComer"]." - ".$row["b.CatNombre"] ." - ".$row["c.SubNombre"]." - ".$row["d.PrvNombre"]." - ".$row["d.VecFecha"] ; ?>
');">
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? Echo $row["PLU"]; ?></b></font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFCC"><b><? Echo $row["ProNombrComer"]; ?></b></font></td>
<td><font size="2"...

1 respuesta

Respuesta
1
El problema lo tienes en $criterio. Asegúrate de que tienes un espacio en blanco al principio y al final de la cadena, sino cuando lo juntes con el resto, no saldrá una cadena SQL correcta:
$criterio = " where a.PLU like '%" . $txt_criterio . "%' or a.ProNombrComer like '%" . $txt_criterio . "%' or b.CatNombre like '%" . $txt_criterio . "%' or c.SubNombre like '%" . $txt_criterio . "%' or d.PrvNombre like '%" . $txt_criterio . "%' or VecFecha like '%" . $txt_criterio . "%' ";
En general, mira que tus sentencias SQL sean correctas. Puedes mostrarlas en pantalla y probarlas en phpMyAdmin para ver los errores.
Hola david.
Mira que ya he probado las sentencias y están bien, ademas este ejercicio lo tengo hecho usando una sola tabla y me funciona perfecto, aquí le envío el código que si me funciona bien, debe ser algo muy simple que no me funciona pero aun no lo he dado que sera.
Este código es usando una sola tabla:
<?
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
$txt_criterio = "";
if (tiny_mce_markerGET["criterio"]!=""){
$txt_criterio = tiny_mce_markerGET["criterio"];
$criterio = " where VecCodigo like '%" . $txt_criterio . "%' or VecCantidad like '%" . $txt_criterio . "%' or VecFecha like '%" . $txt_criterio . "%' or EntCodigo like '%" . $txt_criterio . "%' or VenCodigo like '%" . $txt_criterio . "%'";
}
$sql="SELECT * FROM elipsis_vencimientos" . $criterio;
$res=mysql_query($sql);
$numeroRegistros=mysql_num_rows($res);
if($numeroRegistros<=0)
{
echo "
<div align='center'>";
echo "<font face='verdana' size='-2'>No se encontraron resultados</font>";
echo "</div>
";
}else{
//////////elementos para el orden
if(!isset($orden))
{
$orden="VecCodigo";
}
.
.
.
David le agradezco por su colaboración espero solucionar este inconveniente...
Se me olvido decirle que cuando hago una consulta me sale el siguiente error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a.PLU like '%Leche%' or a.ProNombrComer like '%Leche%' or b.CatNombre like '%Lec' at line 7
Me ratifico en mi anterior estimación. Lo que te dice el error es que la sentencia SQL es incorrecta. Por tanto, com ya te he dicho anteriormente, "mira que tus sentencias SQL sean correctas. Puedes mostrarlas en pantalla y probarlas en phpMyAdmin para ver los errores."
Veo que en el nuevo código que adjuntas sí que hay un espacio delante del where, que no lo había en tu código primero. ¿Has probado las líneas que te he enviado?
Si puedes mostrar la sentencia SQL entera que da el error, envíala y comentamos el error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas