Foros del Web » Programando para Internet » PHP »

buscar por categoria

Estas en el tema de buscar por categoria en el foro de PHP en Foros del Web. Hola, explico: Tengo una pagina en la cual subo articulos y selecciono la categoria del mismo. El problema es que al usar un buscador para ...
  #1 (permalink)  
Antiguo 07/01/2011, 14:54
 
Fecha de Ingreso: julio-2010
Mensajes: 47
Antigüedad: 13 años, 8 meses
Puntos: 1
Pregunta buscar por categoria

Hola, explico:
Tengo una pagina en la cual subo articulos y selecciono la categoria del mismo.
El problema es que al usar un buscador para buscar el articulo X en X categoria, me aparece el articulo bien pero al hacerle click me manda a otro articulo diferente.
Me he dado cuenta que el ID del articulo es el 1 y el de la categoria correspondiente es el 5, y me muestra el titulo del articulo 1 pero al hacerle click se abre el articulo 5.

las tablas son:
Articulo
id
titulo
id_categ

Categoria
id
nombre

cuando subo un articulo, al seleccionar la categoria del mismo, en id_categoria se guarda el numero del id de la categoria correspondiente, ya que hay un enlace entre el desplegable con las categorias y la bdd. el problema es que en vez de tomarme el id de Articulo me toma el id_categoria de Articulo y me abre el articulo con el id igual a ese numero.


Ejemplo

Articulo
id: 1
titulo:
id_categ: 5

Categoria
id: 5
Pan nombre: Comida

Y cuando busco Pan en la categoria Comida, el link para mostrarme el articulo se ve asi:
articulo.php?id=5

Cuando en realidad se tendria que ver asi:
articulo.php?id=1

Este es el codigo:

Código PHP:
<?php 
$sql 
"SELECT * FROM Articulos, Categorias WHERE Articulos.Id_categ = Categorias.Id "
if (isset(
$_POST['txtBusqueda'])) { 
   
$sql .= " AND Articulos.Titulo LIKE '%" $_POST['txtBusqueda'] . "%' "
   if (
intval($_POST['selCategorias']) > 0) { 
      
$sql .= " AND Articulos.Id_categ = '" intval($_POST['selCategorias']) . "'"
   } 

$sql .= " ORDER BY Articulos.Id ASC"
$tabla mysql_query($sql); 
while (
$registro mysql_fetch_array($tabla)) { 
?>
 
<tr> 
<td width="334">&nbsp;</td> 
</tr> 
<?php 

mysql_free_result($tabla); 
?>
 
<?php 
$buscar 
$_POST['txtBusqueda']; 
$result mysql_query($sql);  
$total mysql_num_rows($result); 
// Imprimimos los resultados 
if ($row mysql_fetch_array($result)){  
echo 
"Resultados para: <b>$buscar</b>"
do {  
?>
 
                  <p><b><a href="articulo.php?Id=<?=$row['Id'];?>"> 
                    
<?=$row['Titulo'];?>
 
                  </a></b></p> 
                
<? 
} while ($row mysql_fetch_array($result));  
echo 
"<p>Resultados: $total</p>"
} else {  
// En caso de no encontrar resultados 
echo "No se encontraron resultados para: <b>$buscar</b>";  

?>
¿Alguien me puede dar una solucion?
  #2 (permalink)  
Antiguo 07/01/2011, 15:06
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 3 meses
Puntos: 51
Respuesta: buscar por categoria

El problema es que tenés ids ambiguos, uno por cada tabla. Para solucionarlo tenés que declaralos diferentes. Te paso un ejemplo:

Código SQL:
Ver original
  1. $sql = "SELECT Categorias.Id as idcat,* FROM Articulos, Categorias WHERE Articulos.Id_categ = Categorias.Id ";
  #3 (permalink)  
Antiguo 07/01/2011, 15:20
 
Fecha de Ingreso: julio-2010
Mensajes: 47
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: buscar por categoria

Muchisimas gracias!
exactamente lo que necesitaba
  #4 (permalink)  
Antiguo 07/01/2011, 15:51
 
Fecha de Ingreso: febrero-2005
Mensajes: 187
Antigüedad: 19 años, 1 mes
Puntos: 2
Respuesta: buscar por categoria

Código PHP:
$sql "SELECT Categorias.Id as idcat,* FROM Categorias INNER JOIN Articulos on Categorias.id = Articulos.Id_categ"
Te recomiendo el Inner Join
__________________
___________________________
Hosting y Dominios en colombia
Blog de Cubica

Última edición por jossmorenn; 07/01/2011 a las 15:52 Razón: Error de sintaxis

Etiquetas: filtrar, mysql, buscadores, articulos, filtros, categorias
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 18:48.