¿Cómo mostrar productos relacionados en el carrito de la compra?

publicado por: Anonymous

Para mostrar producto relacionado escogía el valor por método GET en este caso el valor es el id del producto.

Obtenía los datos por medio de una consulta, en este caso el ejemplo es los colores que posee el producto.

$sql = "SELECT * FROM colors WHERE product_id='$id'";

Ahora en el carrito de la compra quiero mostrar una sección que indique también te podrían interesar estos productos.

Supongamos que en la base de datos denominada productos tenga 6 productos.

    id | producto
------ | ------
     1 | Cell
     2 | Cell
     3 | Cell
     4 | Cell
     5 | Cell
     6 | Cell

Y en el carrito de la compra añado los productos con el id 1,3,6

Cómo muestro en la sección también te podrían interesar estos productos menos los productos ya añadidos a la cesta.

Solo he probado con un producto como el ejemplo ya mencionado.

En este caso como se plantearía o cómo sería la consulta.

Para mostrar solo los productos no añadidos a la cesta de la compra.

Este es mi carrito de la compra card.php

 //Carro de la compra

//Si esta definida la ID obtenido por URL
if (isset($_GET['articulo'])) {

    $id_tutorial = $_GET['articulo'];//Obtenemos el ID del producto añadido, para poder acer comprobaciones a mostrar otros resultados.

    //Si esta definido la sesion carro -> es decir si ay algun articulo comprado
    if (isset($_SESSION['carrito'])) {

        $arreglo = $_SESSION['carrito'];
        $encontro = false;      

        for ($i=0; $i<count($arreglo); $i++) { 

            if ($arreglo[$i]['Id'] == $_GET['articulo']) {
                $encontro = true;               
            }
        }

        if ($encontro == false) {


            $titulo = "";
            $precio = 0;
            $precioUSD = 0;
            $icon = "";

            $stmt = $c->prepare("SELECT titulo,precio,icon,id_autor FROM products WHERE page=? and status=1");
            $stmt->bind_param("i",$_GET['articulo']);
            $stmt->execute();
            $stmt->store_result();
            if ($stmt->num_rows > 0) {
                $stmt->bind_result($titulo,$precio,$icon,$id_autor);
                while ($stmt->fetch()) {

                    //Sentencia prepare -> autor proyecto
                    $stmtN = $c->prepare("SELECT autor FROM autor WHERE id_autor=?");           
                    $stmtN->bind_param("i", $id_autor);         
                    $stmtN->execute();          
                    $stmtN->bind_result($autor);            
                    $stmtN->fetch();            
                    $stmtN->close();

                    $datosnuevos = array('Id' => $_GET['articulo'], 'Titulo' => $titulo, 'Precio' => $precio, 'Icon' => $icon, 'Cantidad' => 1 );

                    /*
                        #Si se utiliza array_push() para añadir un solo elemento al array, es mejor utilizar $array[] = ya que de esta forma no existe la sobrecarga de llamar a una función. 
                    */

                    //array_push($arreglo, $datosnuevos); 
                    $arreglo[] = $datosnuevos;
                    $_SESSION['carrito'] = $arreglo;

                    $data = $_SESSION['carrito'];
                    $value_carrito = count($data);
                    $_SESSION['compras'] = $value_carrito;

                } $stmt->close();


            } else {
                $stmt->close();
            }
        }   

    } else { //Caso falso añadimos primer articulo al carro

        $titulo = "";
        $precio = 0;
        $precioUSD = 0;
        $icon = "";

        $stmt = $c->prepare("SELECT titulo,precio,icon,id_autor FROM products WHERE page=? and status=1");
        $stmt->bind_param("i",$_GET['articulo']);
        $stmt->execute();
        $stmt->store_result();
        if ($stmt->num_rows > 0) {
            $stmt->bind_result($titulo,$precio,$icon,$id_autor);
            while ($stmt->fetch()) {

                //Sentencia prepare -> autor proyecto
                $stmtN = $c->prepare("SELECT autor FROM autor WHERE id_autor=?");           
                $stmtN->bind_param("i", $id_autor);         
                $stmtN->execute();          
                $stmtN->bind_result($autor);            
                $stmtN->fetch();            
                $stmtN->close();

            } $stmt->close();

        } else {
            $stmt->close();
        }       

            $arreglo[] = array('Id' => $_GET['articulo'], 'Titulo' => $titulo, 'Precio' => $precio, 'Icon' => $icon, 'Cantidad' => 1 );

            $_SESSION['carrito'] = $arreglo;

            $data = $_SESSION['carrito'];
            $value_carrito = count($data);
            $_SESSION['compras'] = $value_carrito;

            //echo "<script>window.location.reload();</script>";


    }

}

Actualización detalles adicionales.

La tabla de productos.

 id_product       Producto          Marca    subcategoría
-------------  ----------------  ----------    ------
      1          Mini Parlantes       0           1
      2          flash Memory         0           1

La tabla de categoría.

 id    cat_name   categoría
----  ---------- -----------
 1       HP          0             
 2   accesorios      1             
 3    Samsung        0                       

Estructura:

<!-- language: lang-none -->

CREATE TABLE IF NOT EXISTS categories (
 id int(100) NOT NULL,
 cat_name text NOT NULL,
 categoria int(5) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
  1. HP
    • Accesorios
  2. Samsung
    • Accesorios

El la categoría HP mostramos todos los productos de la marca HP incluyendo los accesorios entre otros.

En la subcategoría accesorios solo mostramos estos productos: flash memory, parlantes, audífonos etc.

Nota: Los accesorios son mostrados a la marca que corresponde.

Ahora sí es un producto que no pertenece a accesorios ejemplo una lapto subcategoría en vez de valor 1 es NULL esté producto solo se mostraría en categoría principal HP.

En el casó de que existiera otra subcategoría denominada lapto este producto se mostraría en aquella subcategoría.

solución

Propuesta: En una sección determinada la pagina se requiere listar 5 productos relacionados (de la misma categoría) a los ya añadidos al carro:

<?php
if (isset($_SESSION['carrito'])) {

    // Revisamos los productos en el carro
    $idsProductos = array();
    $hashCategorias = array(); // matriz asociativa de Ids de categorias
    foreach($_SESSION['carrito'] as $product) {

        // Si el producto tiene Id
        if ($product['id']) {
            $idsProductos[] = $product['id'];
        }

        // Si el producto tiene Id de categoria y todavia no fue guardado en la matris asoc.
        if ($product['id_categoria'] && !$hashCategorias[$product['id_categoria']]) {
            $hashCategorias[$product['id_producto']] = true;
        }
    }


    if (!empty($idsProductos)) {

        //
        $idsProductos = implode(',', $idsProductos);

        // Buscamos aquellos productos que no esten en el carro
        $query = 'SELECT *
        FROM products
        WHERE id_product NOT IN ('.$idsProductos.')';

        //
        if (!empty($hashCategorias)) {
            // Obtenemos los Ids que estan como claves de la matriz asociativa
            $idsCategories = array_keys($hashCategorias);
            $idsCategories = implode(',', $idsCategories);

            // y que esten en la misma categoria o subCategoria
            $query .= ' AND id_categoria IN (
                SELECT id
                FROM categories
                WHERE id IN ('.$idsCategories.')
                OR id_categoria IN ('.$idsCategories.')
            )';
        }

        // Ordenados por el titule de la A-Z
        $query .= ' ORDER BY titulo ASC';

        // Buscamos los primeros 5
        $query .= ' LIMIT 5';
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *