2015-09-24 40 views
9

Tôi có 2 bảng: sản phẩm và giỏ hàng, tôi muốn kết hợp các 2 bảng và hiển thị dữ liệu trong mảng theo một điều kiện cụ thể, như sau:kết hợp hai bảng và hiển thị dữ liệu của họ trong một mảng

Tất cả các sản phẩm dưới một thể loại cụ thể nên được hiển thị và nếu một người dùng cụ đã mua bất kỳ sản phẩm trong những sản phẩm được sau đó chi tiết của nó cũng nên được hiển thị ở phía trước của sản phẩm đó

mã mà tôi đã làm cho đến khi bây giờ là

$catid = $_REQUEST['catid']; 
$userid  = $_REQUEST['userid']; 

$sql = "select * from productsize where catid = '".$catid."' GROUP BY productid"; 
$result = mysqli_query($con, $sql); 
if (mysqli_num_rows($result) > 0) 
    { 
     while($row = mysqli_fetch_assoc($result)) 
      { 
       $rows['catid'] = $row['catid']; 
       $rows['catname'] = $row['catname']; 
       $rows['productid'] = $row['productid']; 
       $rows['prodname'] = $row['prodname']; 
       $rows['prodimg'] = $row['prodimg']; 
       $row2[]=$rows; 
      } 
    } 

echo "<pre>"; 
print_r($row2); 
echo "</pre>"; 

Nó cung cấp một mảng như thế này

Array 
(
    [0] => Array 
     (
      [catid] => 2 
      [catname] => C1 
      [productid] => 13 
      [prodname] => P1 
      [prodimg] => 
     ) 

    [1] => Array 
     (
      [catid] => 2 
      [catname] => C1 
      [productid] => 14 
      [prodname] => P1 
      [prodimg] => 
     ) 

    [2] => Array 
     (
      [catid] => 2 
      [catname] => C1 
      [productid] => 15 
      [prodname] => P3 
      [prodimg] => 
     ) 

) 

Nhưng mảng cuối cùng mà tôi muốn ở vị trí của mảng trên là

Array 
(
    [0] => Array 
     (
      [catid] => 2 
      [catname] => C1 
      [productid] => 13 
      [prodname] => P1 
      [prodimg] => 
      [size] => Array 
       (
        [0] => small 
        [1] => medium 
        [2] => large 
        [3] => perpiece 
       ) 
      [cost] => Array 
       (
        [0] => 10 
        [1] => 20 
        [2] => 30 
        [3] => 12 
       ) 
      [purchasedsize] => Array 
       (
        [0] => small 
        [1] => 0 
        [2] => large 
        [3] => 0 
       ) 
      [purchasedquantity] => Array 
       (
        [0] => 2 
        [1] => 0 
        [2] => 1 
        [3] => 0 
       ) 
      [userid] => 1 
     ) 

    [1] => Array 
     (
      [catid] => 2 
      [catname] => C1 
      [productid] => 14 
      [prodname] => P1 
      [prodimg] => 
      [size] => Array 
       (
        [0] => small 
        [1] => medium 
        [2] => large 
        [3] => 0 
       ) 
      [cost] => Array 
       (
        [0] => 15 
        [1] => 20 
        [2] => 25 
        [3] => 0 
       ) 
      [purchasedsize] => Array 
       (
        [0] => 0 
        [1] => medium 
        [2] => 0 
        [3] => 0 
       ) 
      [purchasedquantity] => Array 
       (
        [0] => 0 
        [1] => 1 
        [2] => 0 
        [3] => 0 
       ) 
      [userid] => 1 
     ) 

    [2] => Array 
     (
      [catid] => 2 
      [catname] => C1 
      [productid] => 15 
      [prodname] => P3 
      [prodimg] => 
      [size] => Array 
       (
        [0] => 0 
        [1] => medium 
        [2] => 0 
        [3] => perpiece 
       ) 
      [cost] => Array 
       (
        [0] => 0 
        [1] => 20 
        [2] => 0 
        [3] => 18 
       ) 
      [purchasedsize] => Array 
       (
        [0] => 0 
        [1] => 0 
        [2] => 0 
        [3] => 0 
       ) 
      [purchasedquantity] => Array 
       (
        [0] => 0 
        [1] => 0 
        [2] => 0 
        [3] => 0 
       ) 
      [userid] => 0 
     ) 

) 

Xem bảng sản phẩm (Như bạn sẽ thấy bảng sản phẩm mang productid và dưới mỗi productid có tối đa 4 kích thước (không có nhiều hơn 4))

id catid catname productid prodsize cost prodname prodimg 
1 2  C1  13  small  10 P1 
2 2  C1  13  medium 20 P1 
3 2  C1  13  large  30 P1 
4 2  C1  13  perpiece 12 P1 
5 2  C1  14  small  15 P2 
6 2  C1  14  medium 20 P2 
7 2  C1  14  large  25 P2 
8 2  C1  15  perpiece 18 P3 
9 2  C1  15  medium 20 P3 

Xem giỏ bảng

id catid catname userid productid prodname prodsize quantity prodcost 
1  2  C1  1  13  P1  large  1   30  
2  2  C1  1  13  P1  small  2   10  
3  2  C1  1  14  P2  medium  1   20 

bất cứ ai có thể vui lòng giúp tôi để có được những mảng yêu cầu như kết quả?

Trả lời

1

Hãy thử

$catid = $_REQUEST['catid']; 
$userid  = $_REQUEST['userid']; 

$sql= "SELECT p.catid, p.catname, p.productid, p.prodimg, 
    GROUP_CONCAT(p.prodsize ORDER BY p.id ASC) as size, 
    GROUP_CONCAT(p.cost ORDER BY p.id ASC) as cost, p.prodname, 
    GROUP_CONCAT(c.prodsize,'-',c.quantity) as cart_details, GROUP_CONCAT(DISTINCT(c.userid)) as user_id 
    FROM products p 
    LEFT JOIN cart c ON(c.productid = p.productid AND c.userid = '$userid' AND p.prodsize = c.prodsize) 
    WHERE p.catid ='$catid' 
    GROUP BY p.productid 
    ORDER BY user_id DESC, p.productid ASC"; 


$result = mysql_query($sql); 


if (mysql_num_rows($result) > 0) 
    { 
     $i = 0; 
     while($row = mysql_fetch_assoc($result)) 
      { 
       $rows[$i]['catid'] = $row['catid']; 
       $rows[$i]['catname'] = $row['catname']; 
       $rows[$i]['productid'] = $row['productid']; 
       $rows[$i]['prodname'] = $row['prodname']; 
       $rows[$i]['prodimg'] = $row['prodimg']; 
       $final_size = array_fill(0, 4, '0'); 
       $final_cost = array_fill(0, 4, '0'); 

       $size = explode(',', $row['size']); 
       $cost = explode(',', $row['cost']); 
       foreach($size as $k=>$sizecol) { 
        switch($sizecol) { 
         case 'small': 
          $array_key = '0'; 
          break; 
         case 'medium': 
          $array_key = '1'; 
          break; 
         case 'large': 
          $array_key = '2'; 
          break; 
         case 'perpiece': 
          $array_key = '3'; 
          break; 
        } 
        $final_size[$array_key] = $sizecol; 
        $final_cost[$array_key] = $cost[$k]; 

       } 


       $cart_details = explode(',', $row['cart_details']); 
       $purchasedsize = array_fill(0, 4, '0'); //Since you displayed this array has 4 values only 
       $purchasedquantity = array_fill(0, 4, '0'); 
       foreach($cart_details as $cart) { 
        if($cart != '') { 
         $details = explode('-', $cart); 
         $key = array_search($details[0], $size); 

         $purchasedsize[$key] = $details[0]; 
         $purchasedquantity[$key] = $details[1]; 
        } 

       } 

       $rows[$i]['size'] = $final_size; 
       $rows[$i]['cost'] = $final_cost; 
       $rows[$i]['purchasedsize'] = $purchasedsize; 
       $rows[$i]['purchasedquantity'] = $purchasedquantity; 
       $rows[$i]['userid'] = $row['user_id']; 

       $i++; 
      } 
    } 

echo "<pre>"; 
print_r($rows); 
    echo "</pre>"; 

Mảng sản lượng này

Array 
(
[0] => Array 
    (
     [catid] => 2 
     [catname] => c1 
     [productid] => 13 
     [prodname] => P1 
     [prodimg] => 
     [size] => Array 
      (
       [0] => small 
       [1] => medium 
       [2] => large 
       [3] => perpiece 
      ) 

     [cost] => Array 
      (
       [0] => 10 
       [1] => 20 
       [2] => 30 
       [3] => 12 
      ) 

     [purchasedsize] => Array 
      (
       [0] => small 
       [1] => 0 
       [2] => large 
       [3] => 0 
      ) 

     [purchasedquantity] => Array 
      (
       [0] => 2 
       [1] => 0 
       [2] => 1 
       [3] => 0 
      ) 

     [userid] => 1 
    ) 

[1] => Array 
    (
     [catid] => 2 
     [catname] => c1 
     [productid] => 14 
     [prodname] => P2 
     [prodimg] => 
     [size] => Array 
      (
       [0] => small 
       [1] => medium 
       [2] => large 
       [3] => 0 
      ) 

     [cost] => Array 
      (
       [0] => 15 
       [1] => 20 
       [2] => 25 
       [3] => 0 
      ) 

     [purchasedsize] => Array 
      (
       [0] => 0 
       [1] => medium 
       [2] => 0 
       [3] => 0 
      ) 

     [purchasedquantity] => Array 
      (
       [0] => 0 
       [1] => 1 
       [2] => 0 
       [3] => 0 
      ) 

     [userid] => 1 
    ) 

[2] => Array 
    (
     [catid] => 2 
     [catname] => C1 
     [productid] => 15 
     [prodname] => P3 
     [prodimg] => 
     [size] => Array 
      (
       [0] => 0 
       [1] => medium 
       [2] => 0 
       [3] => perpiece 
      ) 

     [cost] => Array 
      (
       [0] => 0 
       [1] => 20 
       [2] => 0 
       [3] => 18 
      ) 

     [purchasedsize] => Array 
      (
       [0] => 0 
       [1] => 0 
       [2] => 0 
       [3] => 0 
      ) 

     [purchasedquantity] => Array 
      (
       [0] => 0 
       [1] => 0 
       [2] => 0 
       [3] => 0 
      ) 

     [userid] => 
    ) 

) 
+0

mặc dù tôi nhận được một mảng nhưng các giá trị trong nó là không đúng – kavi

+0

kiểm tra mã editied tôi. Tôi đã thay đổi truy vấn –

+0

@still cho mảng sai – kavi

Các vấn đề liên quan