Estoy trabajando en un proyecto de comercio electrónico. Tengo 3 tablas aquí sizes, products y product_sizes.

La tabla sizes es la siguiente:

uid | size
----------
1   | S
2   | M
3   | L

La tabla product_sizes es la siguiente:

product_uid | size_uid
----------------------
1           | 2
1           | 3
2           | 1
2           | 2

Lo que quiero hacer es recuperar todos los tamaños por la product_uid que es la clave externa de la tabla products, este es el código que estoy usando,

    $get_sizes = "SELECT * FROM product_sizes WHERE product_uid IN($pro_id)";
    $run_sizes = mysqli_query($conn, $get_sizes);

    while($row_sizes = mysqli_fetch_assoc($run_sizes)){

        $sizes[] = $row_sizes['size_uid'];
        $sizesAll = implode(", ", $sizes);

    }

Para el primer producto obtengo los valores correctamente, pero para el segundo producto combina los datos.

Por ejemplo, si el producto 1 tiene tamaños 1,3 y el producto 2 tiene 2,3, entonces muestra 1,3,2,3 para el producto 2.

Cualquier ayuda sería apreciada, gracias!

0
Ajinkya More 29 ago. 2020 a las 08:49

1 respuesta

La mejor respuesta

Usaría GROUP_CONCAT aquí:

SELECT
    ps.product_uid,
    GROUP_CONCAT(s.size ORDER BY s.uid) sizes
FROM product_sizes ps
LEFT JOIN sizes s
    ON s.uid = ps.size_uid
GROUP BY
    ps.product_uid;

screen capture from demo link below

Demo

Tenga en cuenta que no estoy agregando ningún código PHP, su pregunta / problemas principales parecen resolverse en torno al SQL en sí, en lugar de cómo consumir el SQL desde PHP.

0
Tim Biegeleisen 29 ago. 2020 a las 05:53