Shopping Cart with Grouping by Seller

1

I wanted to group the products by sellers into my shopping cart. Currently it displays a single list, without this separation.

Example:

Pedro and Maria announce on my website and each one has their products offered and when the customer clicks on buy product of Pedro lists as a group only the products of Pedro and if you buy from Maria also list as a group. As below:

Vendor ( Peter )

 *Produto 1     2    R$ 45,00 R$ 90,00
 *Produto 2     1    R$ 25,00 R$ 25,00
Enviar Pedido de Compra

Marketer ( Maria )

 *Produto 1     1    R$ 45,00 R$ 45,00
 *Produto 2     1    R$ 25,00 R$ 25,00
Enviar Pedido de Compra

Note that the customer will have to send the purchase order to both buyers.

Loading the products I've already done, I'm just not able to group by vendors.

The query and cart view part is below:

foreach ($_SESSION['carrinho'] as $id => $qtd) {

    $sql_vendedor = "SELECT * FROM produtos WHERE id='$id'";
    $qr_vendedor = mysql_query($sql_vendedor) or die(mysql_error());
    $ln_vendedor = mysql_fetch_assoc($qr_vendedor);
    $vendedor = $ln_vendedor['vendedor_id'];

    $sql = "
    SELECT produtos.id, produtos.nome as descricao,produtos.preco, 
        produtos.imagem, produtos.vendedor_id, vendedores.nome as nomevendedor
    FROM produtos
    INNER JOIN vendedores ON produtos.vendedor_id = vendedores.vendedor_id
    WHERE id='$id' AND produtos.vendedor_id=$vendedor
    GROUP BY " . $vendedor;

    $qr = mysql_query($sql) or die(mysql_error());
    $ln = mysql_fetch_assoc($qr);

    $imagem = $ln['imagem'];
    $nome = $ln['descricao'];
    $preco = number_format($ln['preco'], 2, ',', '.');
    $sub = number_format($ln['preco'] * $qtd, 2, ',', '.');
    $vendedor_id = $ln['vendedor_id'];
    $id_produto = $ln['id'];

    $total += $ln['preco'] * $qtd;

    $nomevendedor = $ln['nomevendedor'];

    echo '<tr>';
    echo '<td class="shopping-cart-image">';
    echo '<a href="#"><img src="assets/temp/products/' . $imagem . '" alt="Berry Lace Dress"></a>';
    echo '</td>';
    echo '<td class="shopping-cart-description">';
    echo '<h3><a href="#">' . $nome . '</a></h3>';
    echo '<p><strong>Item ' . $id_produto . '</strong> - Colocar mais alguma descrição aqui...</p>';
    echo '<em>Mais Informações</em>';
    echo '</td>';
    echo '<td class="shopping-cart-ref-no">' . $vendedor_id . ' - ' . $nomevendedor . '</td>';
    echo '<td class="shopping-cart-quantity">';
    echo '<div class="product-quantity">';
    echo '<input id="product-quantity" type="text" name="prod[' . $id . ']" value="' . $qtd . '" readonly class="form-control input-sm">';
    echo '</div>';
    echo '</td>';
    echo '<td class="shopping-cart-price">';
    echo '<strong><span>R$ </span>' . $preco . '</strong>';
    echo '</td>';
    echo '<td class="shopping-cart-total">';
    echo '<strong><span>R$ </span>' . $sub . '</strong>';
    echo '</td>';
    echo '<td class="del-goods-col">';
    echo '<a class="del-goods" href="?acao=del&id=' . $id . '"><i class="fa fa-times"></i></a>';
    echo '</td>';
    echo '</tr>';
}
    
asked by anonymous 02.03.2015 / 14:38

1 answer

1

Let's draw.

Product table

Sellerstable

$ _ SESSION ['cart']

0001=>2
0002=>5
0003=>4

We first generated the list of ids of the products that were purchased:

$itens_comprados = " ";
foreach ($_SESSION['carrinho'] as $id => $qtd) $itens_comprados.= $id.","
$itens_comprados = substr($itens_comprados,0,-1); //pra retirar a virgula do final

Now let's search the database:

$sql = "
SELECT produtos.id, produtos.nome as descricao,produtos.preco, 
    produtos.imagem, produtos.vendedor_id, vendedores.nome as nomevendedor
FROM produtos
INNER JOIN vendedores ON produtos.vendedor_id = vendedores.vendedor_id
WHERE id IN ($itens_comprados) order by vendedor_id";

You want to list all products, do not you? So there's no reason to use a group by in SQL because that would only bring one line per vendor. In your case it is better to order by seller. Then you work as display by seller:

$vendedor_id = $ln['vendedor_id']; 
$id_produto = $ln['id'];

$vendedor_anterior = ""; 
foreach ($id_produto as $key=>$value){
   $vendedor_atual = $vendedor_id[$key]; 

   if($vendedor_atual!=$vendedor_anterior){ //só imprime se trocar de vendedor 
         //imprime coisas relativos ao vendedor ////////
   }

   /// imprime coisas relativas ao item

   //caso você queira imprimir coisas relativas ao vendedor depois de listar todos os produtos , vc coloca um outro if igual ao de cima aqui

   $vendedor_anterior = $vendedor_atual;

}

In my example it would look like:

Seller: Hyoga
        Prod1: suffix, Qty: 2
        Prod2: nunchaku, Quant: 5

Seller: Naruto
   Prod1: Out, Qty: 4

    
01.05.2015 / 23:13