2015-10-17 62 views
1

我有2個表格,購物車和產品。用戶可以從產品表中選擇產品,然後將其詳細信息添加到購物車表中。我想結合這兩個表的值,並給出了結果連接2個表格和顯示數據的值

prodsize的列表

id catid catname productid prodsize  cost prodname 
1  2  CN1  13   small  130  P1 
2  2  CN1  13   large  200  P1 
3  2  CN1  14   small  50  P2 
4  2  CN1  14   medium  90  P2 
5  2  CN1  14   large  110  P2 
6  2  CN1  12   small  70  P3 
7  2  CN1  12   medium  110  P3 
8  2  CN1  13   medium  200  P1 

id catid catname userid productid prodname prodsize prodcost quantity status 
1  2  CN1  1  13   P1  small  130  2  add_to_cart 
1  2  CN1  1  13   P1  large  200  2  order_placed 

當我運行從兩個表中,但在這裏下面的查詢組合值我想,只有那些產品的數量應該得到顯示狀態爲add_to_cart,如果狀態order_placed那麼數量應該是0,誰能告訴PLZ我如何修改下面的代碼,從而獲得所需結果

$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 productsize 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"; 
+1

爲你的查詢添加一個where子句。 –

+0

@Gordon Linoff我已經試過了,但它不是幹活 – pp1989

+0

讀一點點接近,我認爲你需要一個CASE表達式來處理一些有條件的邏輯IB您的輸出。 – shawnt00

回答

0

你已經有了where子句。嘗試添加

AND status = 'add_to_cart' 

就在現有的where子句之後。

1

我對你的兩個條件有點糊塗了(「命令」項不應該得到顯示和數量應爲0)。如果他們的數量爲0,他們需要顯示,對嗎?總之,這裏是我的修補程序考慮到您可能需要做後者(得到「有序」在您的查詢結果項爲0的量)

  1. 你需要按productidstatus
  2. 你需要一個量作爲一個總金額,是以狀態考慮

清理了一些其他的一些東西(如引用索引,這會影響性能):

$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, 
      SUM(CASE WHEN c.status = 'add_to_cart' THEN quantity ELSE 0 END) AS quantity 
     FROM productsize p 
     LEFT JOIN cart c ON(c.productid = p.productid 
      AND p.prodsize = c.prodsize) 
      AND c.userid = {$userid} 
     WHERE p.catid = {$catid} 
     GROUP BY p.productid, c.status 
     ORDER BY p.productid ASC"; 
+1

userid上的過濾器不能在where子句中發生,而不會破壞左連接。 – shawnt00

+0

@ shawnt00 - 好點,我錯過了。更新。謝謝。 –

0

更改c.quantity到:

case c.status 
    when 'add_to_cart' then c.quantity 
    else 0 
end 

既然你用左連接,零結果也將在該產品在用戶的購物車並沒有出現申請。

並注意userid排序可以有效訂購車和非車產品,但就是表達這種意圖的錯誤的方式。最好在各處彙總非組列。