2013-07-23 46 views
0

第一我有一個表,該表是樞軸看起來像這樣Count值

pivot_product_Id | productsxx_Id | category_Id | subcategory_Id | color_Id 
--------------------------------------------------------------------------- 
     1   |  1  |  1 |  1   | 1 
     2   |  1  |  1 |  1   | 2 
     3   |  3  |  1 |  1   | 3 
     4   |  4  |  1 |  2   | 4 
     5   |  4  |  1 |  2   | 5 
     6   |  2  |  2 |  4   | 6 
     7   |  5  |  2 |  5   | 7 

和我有這樣

color_Id | color | color2 
------------------------------------------ 
    1  | black | white 
    2  | blue | orange 
    3  | white | black 
    4  | purple | black 
    5  | black | green 
    6  | red  | black 

顏色表和我的問題是在類別ID 1或2 ...有多少黑色存在?從顏色和color2列計數

我嘗試了這樣的事情,但沒有找到我想要的結果,需要幫助來創建正確的查詢。

if(isset($shoes_post_var) || isset($nightwear_post_var)|| isset($outwear_post_var)){ 

        $query3 = "SELECT count(*) 
       FROM pivot 
      JOIN category ON 
       pivot.category_Id = category.category_Id 
      JOIN subcategory ON 
       pivot.subcategory_Id = subcategory.subcategory_Id  
      JOIN color ON 
       pivot.color_Id = color.color_Id 

      JOIN productsxx ON  
       pivot.productsxx_Id = productsxx.productsxx_Id 
      WHERE 
      color IN ('$black') 
      or 
      color2 IN ('$black') 
      AND 
      category IN ('$shoes_post_var','$nightwear_post_var','$outwear_post_var') 
      GROUP BY pivot.color_Id ASC "; 
     $query5 = mysql_query($query3)or die(mysql_errno()); 
      $total = mysql_result($query5, 0); 
     echo ' '.'('.$total.')';} 
+0

創建和調試查詢作爲在phpMyAdmin純文本,MySQL的控制檯或您喜歡的數據庫管理工具。 **只有在**之後,你得到可以工作的查詢 - 將它移動到php。同樣的問題 - 如果你問關於MySQL,刪除所有不相關的查詢 - 在這種情況下的任何PHP代碼。 – zerkms

+0

使用phpmyadmin,gona看看它。 – samuel

+0

那麼如何顯示*真正的查詢*? – zerkms

回答

1

一個可能的解決方案

SELECT COUNT(*) total 
    FROM pivot 
WHERE category_id IN (1, 2) 
    AND color_id IN 
( 
    SELECT color_id 
    FROM color 
    WHERE color = 'black' 
     OR color2 = 'black' 
) 

這裏是SQLFiddle演示

+0

非常感謝 – samuel

+0

@samuel你非常歡迎。我很高興我可以幫助:) – peterm

+0

你知道子選擇通常比聯接慢得多。 –

0

您只描述了兩個表,並詢問基於這兩個表的查詢。這是一個簡單的問題一起進行簡單的選擇 - 和計數 - 是這樣的:

SELECT count(1) 
FROM pivot 
JOIN color ON (pivot.color_id=color.color_id AND 'black' in (color.color, color.color2)) 
WHERE pivot.category_id = 1 

隨意改變where子句其他類別。

但是,您現有的代碼會加入5個表格並使用其他一些選擇條件。你確實需要問正確的問題。不要試圖暗示另一個問題。

+1

DBMS **對COUNT(*)具有**優化,而COUNT(1)將被視爲應用於'1'整數字面值的COUNT(),這只是令人困惑且沒有任何真正的理由使用,還是呢? – zerkms

+0

感謝您的回答 – samuel

+0

@zerkms不清楚'count(*)'的優化,但在過去的20年中,我學會了'count(1)'更快。這是因爲對於count(*)而言,索引或表(如果不存在索引)需要掃描來檢索值,而count(1)用戶內部行ID則更快。上次我在1億行的postgres表上進行了類似的比較,'count(1)'比'count(*)'大約快了5倍 –