PHP - Agrupar filtro por categoria php

 
Vista:
Imágen de perfil de ccessaro
Val: 52
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Agrupar filtro por categoria php

Publicado por ccessaro (23 intervenciones) el 05/12/2016 23:57:35
Buenas Tardes! tengo una situacion que no he podido solucionar, tengo 2 filtros en un listado y uno de ellos es Categoria y el otro es para las lineas de cada categoria, cuando quiero las categorias y lineas por aparte funcionan en español le doy click a categoria uno y me salen todos los articulos de esa categoria y asi para todas .....pero las lineas me salen todas asi esten vinculadas a tras categorias, lo quiero es que cuando salgan las lineas solo se vean las que estan con esa categoria.

las categorias y linea las muestro por medio de un filtro y son menus independientes,
este es el CODIGO de menu lineas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
	// Selecciona las lineas de fabricacion
	$db_linea = new db_connect(DB_TYPE, HOST, DBNAME, USER, PASSWD);
	$sql = " SELECT * FROM subcat  ORDER BY id_subcat ASC";
	$db_linea->db_exec($sql);
	while($lineas = $db_linea->get_array())
		{
			echo
			'
		<tr>
		</tr>
		<ul class="menu-drop">
		<li class="mod-2">
		<ul class="cute">
			<li class="subitem"><a href="product.php?filtro_c='.$lineas[id_subcat].'">'.$lineas[name].'</a></li>
		</ul>
			</li>
		</ul>
		';
		}
?>
las tablas son las siguientes

CREATE TABLE `articulo` (
`id_articulo` int(11) NOT NULL auto_increment,
`referencia` char(20) character set utf8 collate utf8_spanish_ci default NULL,
`nombre` varchar(60) character set utf8 collate utf8_spanish_ci default NULL,
`precio` float default NULL,
`promo` float default '0',
`cuanto_hay` char(30) default '0',
`imagen` varchar(255) character set utf8 collate utf8_spanish_ci default 'no_photo',
`id_subcat` int(11) NOT NULL,
`categoria` varchar(50) NOT NULL,
`descripcion` text character set utf8 collate utf8_spanish_ci NOT NULL,
`fecha` datetime NOT NULL,
`restringido` char(2) character set utf8 collate utf8_spanish_ci default NULL,
PRIMARY KEY (`id_articulo`),
UNIQUE KEY `articulo_idx` (`referencia`),
KEY `id_subcat` (`id_subcat`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=619 ;

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

CREATE TABLE `subcat` (
`id_subcat` int(11) NOT NULL auto_increment,
`name` varchar(60) default NULL,
`categoria` varchar(50) NOT NULL,
PRIMARY KEY (`id_subcat`),
UNIQUE KEY `subcat_udx` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;

la verdad no se si se necesiten mas datos lo que quiero en si es que cuando me muestre la categoria uno en las lineas solo muestren las lineas de categoria uno o que pueda agrupar las lineas por cada categoria.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de ccessaro
Val: 52
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Agrupar filtro por categoria php

Publicado por ccessaro (23 intervenciones) el 06/12/2016 23:32:00
Bueno la verdad es que busque otra forma de hacerlo y en la tabla subcat que es la siguiente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
--
-- Estructura de tabla para la tabla `subcat`
--
 
CREATE TABLE `subcat` (
  `id_subcat` int(11) NOT NULL auto_increment,
  `name` varchar(60) default NULL,
  `categoria` varchar(50) NOT NULL,
  PRIMARY KEY  (`id_subcat`),
  UNIQUE KEY `subcat_udx` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;
 
--
-- Volcar la base de datos para la tabla `subcat`
--
 
INSERT INTO `subcat` VALUES (1, 'ACCESORIOS ', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (2, 'ALAS', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (3, 'DISFRAZ', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (12, 'DIADEMAS', 'HORALOCA');
INSERT INTO `subcat` VALUES (11, 'COLLARES', 'HORALOCA');
INSERT INTO `subcat` VALUES (10, 'ANTIFAZ', 'HORALOCA');
INSERT INTO `subcat` VALUES (9, 'AUREOLAS', 'HORALOCA');
INSERT INTO `subcat` VALUES (8, 'PELUCAS', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (7, 'MASCARAS', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (6, 'GUANTES', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (5, 'GORROS', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (4, 'ESPADAS', 'HALLOWEEN');
INSERT INTO `subcat` VALUES (13, 'GAFAS', 'HORALOCA');
INSERT INTO `subcat` VALUES (14, 'ADORNOS', 'NAVIDAD');
INSERT INTO `subcat` VALUES (15, 'DECORACION', 'NAVIDAD');
INSERT INTO `subcat` VALUES (16, 'BABY SHOWER', 'RECORDATORIOS');
INSERT INTO `subcat` VALUES (17, 'MATRIMONIO', 'RECORDATORIOS');
INSERT INTO `subcat` VALUES (18, 'PRIMERA COMUNION', 'RECORDATORIOS');
INSERT INTO `subcat` VALUES (19, 'RELIGIOSO', 'RECORDATORIOS');
INSERT INTO `subcat` VALUES (20, 'BOLSAS REGALO', 'EXPRESION SOCIAL');
INSERT INTO `subcat` VALUES (21, 'CAJAS REGALO', 'EXPRESION SOCIAL');
INSERT INTO `subcat` VALUES (22, 'CACHARRO', 'EXPRESION SOCIAL');
INSERT INTO `subcat` VALUES (23, 'LLAVEROS', 'EXPRESION SOCIAL');
INSERT INTO `subcat` VALUES (24, 'VARIOS', 'EXPRESION SOCIAL');
INSERT INTO `subcat` VALUES (25, 'FIESTAS', 'EXPRESION SOCIAL');

lo que hice fue cambiar un poco la consulta y es asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
	// Selecciona las lineas de fabricacion
	<?php
		$db_linea = new db_connect(DB_TYPE, HOST, DBNAME, USER, PASSWD);
		$sql = " SELECT * FROM subcat GROUP BY categoria";
		$db_linea -> db_exec($sql);
		while($lineas = $db_linea->get_array())
			{
			echo
			'
<div class=" rsidebar span_1_of_left">
   <ul class="menu-drop">
	<li class="item1"><a href="product.php?filtro='.$lineas[id_subcat].'">'.$lineas[categoria].'</a>
	   <ul class="cute">
		<li class="subitem1"><a href="product.php?filtro_c='.$lineas[id_subcat].'">'.$lineas[name].'</a></li>
	   </ul>
	</li>
  </ul>
</div>
	';
	}
	?>

Como ven lo estoy agrupando por CATEGORIA y que me n muestre los NOMBRES (NAME) que pertenecen a cada CATEGORIA y me muestra las 5 CATEGORIAS (HALLOWEEN - NAVIDAD - HORALOCA - RECORDATRIOS - EXPRESION SOCIAL) pero son 25 registros con nombres diferentes en el campo NAME y solo me muestra el primero (solo uno por categoria) como puedo hacer para que muestre los 25 registros (los que faltan), muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lopez
Val: 395
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Agrupar filtro por categoria php

Publicado por Lopez (128 intervenciones) el 08/12/2016 03:05:44
Estimado ccessaro,

Con gusto te ayudaré mas, si resumes un poco tu post.
No esperarás que nos leamos todo el código.
A simple vista necesitas reestructurar tus tablas, es decir, crear una tabla para CATEGORIAS y otra para SUBCATEGORIAS,
cada una con su ID y NOMBRE y seguido usar WHERE y algo asi como un JOIn. Un ejemplo:

1
SELECT * FROM tabla1,tabla2 WHERE tabla1.id = tabla2.id;

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de ccessaro
Val: 52
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Agrupar filtro por categoria php

Publicado por ccessaro (23 intervenciones) el 08/12/2016 23:06:44
Muchas gracias por tu comentario ...agradezco tu tiempo voy a hacer una prueba como me dices gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar