Gracias por la data.
Reconstruí estas dos tablas y las cargué con lo que me pasaste, luego de lo cual hice dos consultas. La primera usando tu primer post; la segunda haciendo un INNER JOIN mejorado:
Código MySQL:
Ver original -> FROM productos
,subproducto
-> WHERE productos.idPro
= subproducto.idPro
; +-------+-------+---------------------------------+-----------------------------------+----------+-------+-------+--------------------------------+------------+------+
| idPro | valor | nomPro | carPro | idSubPro | idPro | valor | nomSubPro | desSubPro | ruta |
+-------+-------+---------------------------------+-----------------------------------+----------+-------+-------+--------------------------------+------------+------+
| 2 | si | D·ctos de Ventilaci¾n de PVC | | 1 | 2 | si | Ducto Impelante de PVC | dwcasdcasd | |
| 2 | si | D·ctos de Ventilaci¾n de PVC | | 2 | 2 | si | Ducto Aspirante de PVC | asvadva | |
| 3 | si | Ventiladores ElÚctricos Axiales | | 3 | 3 | si | Ventilador Axial tipo A | | |
| 3 | si | Ventiladores ElÚctricos Axiales | | 4 | 3 | si | Ventilador Axial tipo B | | |
| 2 | si | D·ctos de Ventilaci¾n de PVC | | 5 | 2 | si | codo para ducto de ventilaci¾n | asdvasdv | |
| 5 | no | Ventilador CentrÝfugo
| ┐Que es un Ventilador CentrÝfugo? | 6 | 5 | si | Ventilador CentrÝfugo Tipo H | | | +-------+-------+---------------------------------+-----------------------------------+----------+-------+-------+--------------------------------+------------+------+
mysql
> SELECT P.idPro
, S.idSubPro
, P.nomPro
, S.nomSubPro
, S.desSubPro
, P.carPro
, P.valor
, P.valor
, S.ruta
-> productos P
-> subproducto S
USING(idPro
, valor
) +-------+----------+---------------------------------+--------------------------------+------------+--------+-------+-------+------+
| idPro | idSubPro | nomPro | nomSubPro | desSubPro | carPro | valor | valor | ruta |
+-------+----------+---------------------------------+--------------------------------+------------+--------+-------+-------+------+
| 2 | 1 | D·ctos de Ventilaci¾n de PVC | Ducto Impelante de PVC | dwcasdcasd | | si | si | |
| 2 | 2 | D·ctos de Ventilaci¾n de PVC | Ducto Aspirante de PVC | asvadva | | si | si | |
| 2 | 5 | D·ctos de Ventilaci¾n de PVC | codo para ducto de ventilaci¾n | asdvasdv | | si | si | |
| 3 | 3 | Ventiladores ElÚctricos Axiales | Ventilador Axial tipo A | | | si | si | |
| 3 | 4 | Ventiladores ElÚctricos Axiales | Ventilador Axial tipo B | | | si | si | |
+-------+----------+---------------------------------+--------------------------------+------------+--------+-------+-------+------+
En ambos casos, lo que obtuve es lo que esperaba: los datos coincidentes de la primera tabla se repiten una vez por cada instancia diferente de la segunda. En este sentido la consulta funciona exactamente como se espera y como
debe funcionar.
Así es la tabla resultado de la consulta. Siempre.
Entonces volví a tu primer post:
Cita: Productos:
Poleras de Algodón:
Poleras Rojas
Poleras Blancas
Poleras Amarillas
Pero me esta duplicando el producto por cada subproducto, o sea:
Productos:
Poleras de Algodón:
Poleras Rojas
Poleras de Algodón:
Poleras Blancas
Poleras de Algodón:
Poleras Amarillas
Espero se entienda el problema.
Hay dos cosas distintas:
La primera lista que quieres no se obtiene solamente con la consulta. Tienes que manipular el resultado para crear esa tabla en la salida del script de PHP. No se puede hacer de otro modo porque MySQL siempre te repetirá esos primeros campos en cada instancia distinta de subproducto.
La segunda lista es la consecuencia de una condición ineficiente, porque no estabas considerando qué valor debía tener la columna "valor" en ambas tablas, y terminabas con registros que no debían usarse.
Lo que se te hacía difícil de manipular era que el ordenamiento era caótico. Algunos registros del mismo producto aparecían en posiciones incorrectas.
Sintetizando: Haz la consulta como te la paso y luego usa un for/next para recorrer la tabla, analizando en cada vuelta si cambia el valor del nombre de producto para poner el encabezado.
Eso MySQL no te lo puede hacer porque devuelve tablas, no reportes.
Tip final: Noto que estás trabajando tablas relacionadas, pero sin usar FK. Deberías considerar cambiar de tablas MyISAM a InnoDB para mantener mejor la integridad referencial