Foros del Web » Programando para Internet » PHP »

buscador con filtro desde diferentes tablas

Estas en el tema de buscador con filtro desde diferentes tablas en el foro de PHP en Foros del Web. Estoy intentando realizar una web con un panel de administración. En la web se ven listados los productos y a través de un formulario con ...
  #1 (permalink)  
Antiguo 11/12/2014, 10:59
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 18 años, 10 meses
Puntos: 0
buscador con filtro desde diferentes tablas

Estoy intentando realizar una web con un panel de administración.
En la web se ven listados los productos y a través de un formulario con filtros en base a categorías, grupos o marcas

No logro realizar este buscador ya que la selección de los filtros viene de otra tabla que no es la de los productos

No se si lo planifico bien.
Cada producto puede pertenecer a diferentes grupos (hombre, mujer, niño) y a diferentes categorías (pantalones, zapatos...) y a diferentes marcas (marca1...)
Estos grupos, categorías y marcas son ampliables (no son fijos)
En este sentido creo una tabla para productos, una para los filtros (que tienen un campo llamado "tipo" para determinar si es categorías, grupo o marca) y una tabla para las relaciones entre filtros y productos (los relaciono a traves del campo hcodigo de la tabla productos y hcodigo_prod de la tabla filtro_rel)

Necesito orientación a la hora de crear un buscador con casillas de verificación con las diferentes categorías, grupos y marcas y según se activen unos u otros muestre una pagina de resultados.

Código:
#
# Structure for table "productos"
#

CREATE TABLE `productos` (
  `id` int(4) unsigned NOT NULL DEFAULT '1',
  `hcodigo` varchar(15) COLLATE utf8_spanish_ci NOT NULL DEFAULT '',
  `hnombre` varchar(250) COLLATE utf8_spanish_ci DEFAULT NULL,
  `huso` varchar(250) COLLATE utf8_spanish_ci DEFAULT NULL,
  PRIMARY KEY (`hcodigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

#
# Structure for table "filtros"
#

CREATE TABLE `filtros` (
  `Id_filtro` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `tipo` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  PRIMARY KEY (`Id_filtro`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

#
# Structure for table "filtro_rel"
#

CREATE TABLE `filtro_rel` (
  `Idfrel` int(11) NOT NULL AUTO_INCREMENT,
  `hcodigo_prod` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `Ide_filtro` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `activ` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Idfrel`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  #2 (permalink)  
Antiguo 11/12/2014, 11:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: buscador con filtro desde diferentes tablas

Eso es diseño de base de datos, no tiene relación alguna con el foro de PHP porque sencillamente no es código PHP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/12/2014, 11:57
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: buscador con filtro desde diferentes tablas

Disculpa. Lo que intento es realizar un buscador que me muestre las diferentes casillas segun sean grupos, caegorias o marcas

realizo selects en funcion del grupo, marca o categoria para luego mostrarlos
Código:
mysql_select_db($database_conect, $conect);
$query_Recordgrupos = "SELECT * FROM filtros WHERE tipo LIKE '%grupos%' ORDER BY Id_filtro ASC";
$Recordgrupos = mysql_query($query_Recordgrupos, $conect) or die(mysql_error());
$row_Recordgrupos = mysql_fetch_assoc($Recordgrupos);
$totalRows_Recordgrupos = mysql_num_rows($Recordgrupos);

mysql_select_db($database_conect, $conect);
$query_Recordmarca = "SELECT * FROM filtros WHERE tipo LIKE '%marca%'";
$Recordmarca = mysql_query($query_Recordmarca, $conect) or die(mysql_error());
$row_Recordmarca = mysql_fetch_assoc($Recordmarca);
$totalRows_Recordmarca = mysql_num_rows($Recordmarca);

mysql_select_db($database_conect, $conect);
$query_Recordcateg = "SELECT * FROM filtros WHERE tipo LIKE '%categoria%'";
$Recordcateg = mysql_query($query_Recordcateg, $conect) or die(mysql_error());
$row_Recordcateg = mysql_fetch_assoc($Recordcateg);
$totalRows_Recordcateg = mysql_num_rows($Recordcateg);
El formulario con las casillas de los grupos, marcas o categorias cogidas de la tabla filtros...
Código:
<form action="resultados.php" method="get" enctype="multipart/form-data">
									<div class="relative">
										<fieldset>
										
										<h7>Grupos</h7>
											<ul>
												<?php do { ?>
												  <li class="m_bottom_2">
												    <input type="checkbox" name="" id="checkbox_<?php echo $row_Recordgrupos['Id_filtro']; ?>">
												    <label for="checkbox_<?php echo $row_Recordgrupos['Id_filtro']; ?>" class="nomcasilla"><?php echo $row_Recordgrupos['nombre']; ?></label>
											    </li>
												  <?php } while ($row_Recordgrupos = mysql_fetch_assoc($Recordgrupos)); ?>
											</ul>
											
										
										</fieldset>
									</div>
									
                                    <div class="relative">
										<fieldset>
	<h6 >Marcas</h6><hr class="divider_bg m_bottom_10">
    							<ul>
									<li class="m_bottom_2">
										<input type="checkbox" name="" id="checkbox_<?php echo $row_Recordmarca['Id_filtro']; ?>">
										<label for="checkbox_<?php echo $row_Recordmarca['Id_filtro']; ?>" class="nomcasilla"><?php echo $row_Recordmarca['nombre']; ?></label>	
									</li>
									
								</ul>
											
										
										</fieldset>
									</div>
                                    
                                    <div class="relative">
										<fieldset>
										
										<h6>categorias</h6>
											<ul>
												<?php do { ?>
											    <li class="m_bottom_2">
												    <input type="checkbox" name="" id="checkbox_<?php echo $row_Recordcateg['Id_filtro']; ?>">
												    <label for="checkbox_<?php echo $row_Recordcateg['Id_filtro']; ?>" class="nomcasilla"><?php echo $row_Recordcateg['nombre']; ?></label>	
												    </li>
												  <?php } while ($row_Recordcateg = mysql_fetch_assoc($Recordcateg)); ?>
												
											</ul>
											
											
										</fieldset>
									</div>

									<button type="sent" class="button_type_2 d_block w_full t_align_c grey state_2 tr_all second_font fs_medium tt_uppercase"><i class="fa fa-refresh d_inline_m m_right_9 fs_"></i>Filtrar</button>
								</form>
Supongo que voy bien por ahora.

Ahora me faltaria la pagina resultados.php
que me deberia de mostrar todos los productos que tengan pertenezcan a los grupos, caegorias y marcas seleccionados en el formulario
Aqui es donde no se como seguir

Si no pertenece a este foro por favor ¿podéis moverlo a mysql si lo veis más oportuno?
  #4 (permalink)  
Antiguo 11/12/2014, 13:08
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: buscador con filtro desde diferentes tablas

Sabes que puedes usar OR o AND segun tus necesidades?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 11/12/2014, 13:38
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: buscador con filtro desde diferentes tablas

Te falta por lo menos una tabla.

#productos
->id_producto :: PRIMAY KEY
->nombre
->slug :: UNIQUE KEY
->descripcion

#filtros_categoria
->id _filtro_categoria :: PRIMAY KEY
->nombre
->slug :: UNIQUE KEY
->tipo_relacion (AND ó OR)

#tipo_filtros
->id_tipo_filtro :: PRIMAY KEY
->id_filtro_categoria :: FOREIGN KEY #filtro->id_filtro
->nombre
->slug :: UNIQUE KEY

#filtros_productos
->id_tipo_filtro :: PRIMARY KEY :: FOREIGN KEY #tipo_filtros->id_tipo_filtro
->id_producto :: PRIMARY KEY :: FOREIGN KEY #productos->id_producto


SLUG es un campo que sirve para pasarlo por la URL, y hacer urls amigables. Por ejemplo, si tengo un producto llamado "Televisión LG de 32'' LX HJ10000-M" su slug debería ser algo como "television-lg-de-32-lx-hj10000-m". Así puedes crear un enlace http://www.mitienda.com/articulos/te...2-lx-hj10000-m que es mucho mejor que http://www.mitienda.com/articulos?id=32 ó http://www.mitienda.com/articulos/32.

La tabla filtros_categoria es donde iría lo de "Marca", "Grupo", "Categoría", etc. Aunque lo mejor sería sacar por lo menos lo de "Categoría" a una talba exclusívamente para ella, porque es muy comú n crear diferentes tipos de "filtros" según la categoría a la que pertenece una familia de artículos. Por ejemplo, para la televisi´´on conviene crear un filtro llamado "Pulgadas", con el tamaño en pulgadas; pero para la categoría "pantalones" ese filtro no sirve de nada. i Categoría fuera una tabla por sí misma, podrías relacionar los tipos de filtros según la categoría a la que pertenecen.

Cuando se tachan diferentes tipos de filtros de diferentes categorías, normalmente se hace un AND entre ellos, y cuando se marcan varias de la misma categoría, se suele hacer un OR. Pero no siempre, así que si acaso te interesa hacer un AND tambien de los filtros marcados del mismo tipo_filtro, para eso se utiliza el campo "tipo_relacion " y decir explícitamente cómo relacionarlos en la consulta.

Implementar todo esto es cosa tuya.
  #6 (permalink)  
Antiguo 11/12/2014, 13:40
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: buscador con filtro desde diferentes tablas

si
Lo que me lia es como puedo recoger los datos que vienen de ese formulario y que en la pagina resultados me muestre los productos (tabla productos) cuyo hcodigo esté en la tabla filtro_rel y que tengan un valor de 1

No se si es que me estoy liando pero no logro ver como lo puedo planificar
  #7 (permalink)  
Antiguo 12/12/2014, 11:09
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: buscador con filtro desde diferentes tablas

No logro crear la pagina que recoge los datos y los muestra las casillas activas en el formulario.
En un formulario cuyas casillas siempre son las mismas (no son leidas de una tabla de la db) y la pagina de resultados recoge eso datos no tengo problema.

Pero no llego al querer mostrar los productos (tabla productos) que pertenezcan a los diferentes grupos, categorias o marcas (tabla filtros) y teniendo en cuenta que para que un producto sea de un grupo, categoria... debe estar en la tabla filtro_rel con el campo activ=1

Por favor si alguien me puede orientar con esta pagina de resultados que coge los datos del formulario y luego hace el select se lo agradezco.

Estas son las llamadas que hago en la pagina buscar
Código PHP:
<?php require_once('../Connections/conect.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

mysql_select_db($database_conect$conect);
$query_Recordset1 "SELECT * FROM productos ORDER BY hnombre ASC";
$Recordset1 mysql_query($query_Recordset1$conect) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);

mysql_select_db($database_conect$conect);
$query_Recordgrupos "SELECT * FROM filtros WHERE tipo LIKE '%grupos%' ORDER BY Id_filtro ASC";
$Recordgrupos mysql_query($query_Recordgrupos$conect) or die(mysql_error());
$row_Recordgrupos mysql_fetch_assoc($Recordgrupos);
$totalRows_Recordgrupos mysql_num_rows($Recordgrupos);

mysql_select_db($database_conect$conect);
$query_Recordmarca "SELECT * FROM filtros WHERE tipo LIKE '%marca%'";
$Recordmarca mysql_query($query_Recordmarca$conect) or die(mysql_error());
$row_Recordmarca mysql_fetch_assoc($Recordmarca);
$row_Recordmarca mysql_fetch_assoc($Recordmarca);
$totalRows_Recordmarca mysql_num_rows($Recordmarca);

mysql_select_db($database_conect$conect);
$query_Recordcateg "SELECT * FROM filtros WHERE tipo LIKE '%categoria%'";
$Recordcateg mysql_query($query_Recordcateg$conect) or die(mysql_error());
$row_Recordcateg mysql_fetch_assoc($Recordcateg);
$totalRows_Recordcateg mysql_num_rows($Recordcateg);
?>
ESTE ES EL FORMULARIO QUE ME ENVIA LOS DATOS POR EN LA URL(coge todos los datos de la trabla filtros segun las consultas anteriores)
Código HTML:
 <form action="resultados.php" method="get"> <div class="relative">
										<fieldset>
										
										<h6>GRUPOS</h6>
								<ul>
												<?php do { ?>
												  <li class="m_bottom_2">
												    <input type="checkbox" name="<?php echo $row_Recordgrupos['id_filtro']; ?>" id="<?php echo $row_Recordgrupos['id_filtro']; ?>" value="1">
												    <label for="<?php echo $row_Recordgrupos['id_filtro']; ?>" class="nomcasilla"><?php echo $row_Recordgrupos['nombre']; ?></label>
											    </li>
												  <?php } while ($row_Recordgrupos = mysql_fetch_assoc($Recordgrupos)); ?>
								</ul>
											
										
										</fieldset>
									</div>
									
                                    <div class="relative">
										<fieldset>
									<h6>Categorías</h6>
    							<ul>
									<?php do { ?>
											    <li class="m_bottom_2">
												    <input type="checkbox" name="<?php echo $row_Recordcateg['id_filtro']; ?>" id="<?php echo $row_Recordcateg['id_filtro']; ?>"  value="1">
												    <label for="<?php echo $row_Recordcateg['id_filtro']; ?>" class="nomcasilla"><?php echo $row_Recordcateg['nombre']; ?></label>	
												    </li>
												  <?php } while ($row_Recordcateg = mysql_fetch_assoc($Recordcateg)); ?>

									
								</ul>
											
										
										</fieldset>
									</div>
                                    
                                    <div class="relative">
										<fieldset>
										
										<h6>Marcas</h6>
								
								<ul>
																								<?php do { ?>
								    <li class="m_bottom_2">
									    <input type="checkbox" name="<?php echo $row_Recordmarca['id_filtro']; ?>" id="<?php echo $row_Recordmarca['id_filtro']; ?>" value="1">
									    <label for="<?php echo $row_Recordmarca['id_filtro']; ?>" class="nomcasilla"><?php echo $row_Recordmarca['nombre']; ?></label>	
								      </li>
									  <?php } while ($row_Recordmarca = mysql_fetch_assoc($Recordmarca)); ?>
								</ul>
											
											
										</fieldset>
									</div>

									<button type="sent">Filtrar</button>
								</form> 

Con esto logro que la pagina resultados venga del siguiente modo
resultados.php?1=1&4=1&5=1&8=1
con lo cual el filtro con id_filtro=1,4,5 y 8 ha sido marcado por el usuario en el formulario. Los otros no han sido marcados


Ahora, despues de muchos intentos sigo liado con la pagina de resultados

Debo coger esa url con los id_filtros marcados y relacionarlo con la tabla filtros_rel para mostrar los productos.

Por favor alguna orientación?

ESTA SON LAS TABLAS

Código:
--
-- Estructura de tabla para la tabla `filtros`
--

CREATE TABLE IF NOT EXISTS `filtros` (
`id_filtro` int(11) NOT NULL,
  `nombre` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  `tipo` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;



--
-- Estructura de tabla para la tabla `filtro_rel`
--

CREATE TABLE IF NOT EXISTS `filtro_rel` (
`id_relacion` int(11) NOT NULL,
  `id_producto` int(11) NOT NULL,
  `id_filtro` int(11) NOT NULL,
  `activ` int(2) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;



-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `productos`
--

CREATE TABLE IF NOT EXISTS `productos` (
`id_producto` int(11) NOT NULL,
  `hcodigo` varchar(15) COLLATE utf8_spanish_ci NOT NULL DEFAULT '',
  `hnombre` varchar(250) COLLATE utf8_spanish_ci DEFAULT NULL,
  `hpresentacion` varchar(250) COLLATE utf8_spanish_ci DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;



--
-- Filtros para la tabla `filtro_rel`
--
ALTER TABLE `filtro_rel`
ADD CONSTRAINT `rest_filtros` FOREIGN KEY (`id_filtro`) REFERENCES `filtros` (`Id_filtro`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `rest_prod` FOREIGN KEY (`id_producto`) REFERENCES `productos` (`id_producto`) ON DELETE NO ACTION ON UPDATE NO ACTION;
  #8 (permalink)  
Antiguo 12/12/2014, 11:32
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: buscador con filtro desde diferentes tablas

Tu problema es que no sabes de PHP... no deberías hacer 4 consultas diferentes sobre un mismo form para obtener datos sobre un mismo fin...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #9 (permalink)  
Antiguo 12/12/2014, 12:19
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: buscador con filtro desde diferentes tablas

Disculpa. Hago lo que puedo para ir aprendiendo. Y gracias a los foros como éste voy haciendo mis pinitos. En este caso se me plantea una cosa que nunca he realizado antes y por eso pido orientación.

Etiquetas: buscador, formulario, tabla, tablas
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 04:03.