¿如何向购物车产品展示相关产品?

时间:2016-10-09 17:37:31

标签: php mysql

我希望显示用户在购物车中添加的无关紧要的结果。

我按方法ID从产品中获取GET,点击网址。

<a href=http:./cart/$id/$url>

我的例子

products表只有6条记录,也就是说要购买6种产品。

现在,如果用户添加了3个要购买的商品,id5 ​id1 id3

现在我的问题是,如何向用户购买的用户尚未购买的其他产品products id2 id4我在购买id6 id5 ​id1之前提到过。

我将为购物车的无关结果生成的查询是这样的:

id3

我花了一个逻辑 $result = $c->prepare("SELECT id_tutorial,page,titulo,info,icon,bg,vdo,url,precio,duracion,status FROM tutoriales WHERE id_tutorial!=? and status=1 LIMIT 6"); !=

但我不知道在使用此查询结果之前必须采取的过程。

这是我的购物车代码 card.php

<>

1 个答案:

答案 0 :(得分:1)

这个小提琴将为您提供如何构建SELECT查询

的先机

假设$_SESSION['carrito']包含客户已购买的产品,并且$_SESSION['compras']保留了所购买产品总数,SELECT查询以获取剩余产品将是像这样:

SELECT id_tutorial,page,titulo,info,icon,bg,vdo,url,precio,duracion,status,id_nivel,id_estado 
FROM tutoriales 
WHERE status = 1 AND id_tutorial NOT IN (
    SELECT id_tutorial 
    FROM tutoriales 
    WHERE id_tutorial IN (" . rtrim(str_repeat("?,", $_SESSION['compras']), ",") . "
    )
)

你的代码应该是这样的:

// your code

$stmt = $c->prepare("SELECT id_tutorial,page,titulo,info,icon,bg,vdo,url,precio,duracion,status,id_nivel,id_estado FROM tutoriales WHERE status = 1 AND id_tutorial NOT IN (SELECT id_tutorial FROM tutoriales WHERE id_tutorial IN (" . rtrim(str_repeat("?,", $_SESSION['compras']), ",") . "))");
$param = array(); 
$paramType = '';
for($i = 0; $i < $_SESSION['compras']; ++$i){
    switch(gettype($_SESSION['carrito'][$i]['Id'])){
        case 'boolean':
        case 'NULL':
        case 'integer':
            $paramType .= 'i';
            break;
        case 'double':
            $paramType .= 'd';
            break;
        case 'string':
            $paramType .= 's';
            break;
        default:
            $paramType .= 'b';
    }
    $param[] = &$_SESSION['carrito'][$i]['Id'];
}
array_unshift($param, $paramType);
call_user_func_array(array($stmt, 'bind_param'), $param);

$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
    $result->bind_result($id_tutorial,$page,$titulo,$info,$icon,$bg,$vdo,$url,$precio,$duracion,$status,$id_nivel,$id_estado);
    while ($result->fetch()){

        // your code          

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