从表列计数值

时间:2013-07-23 22:16:54

标签: mysql sql

首先我有一个像这样的

的表
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类......有多少黑色?从颜色和颜色2列计数

我尝试了类似这样的事情,但没有根据我想要的结果来制作正确的查询。

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.')';}

2 个答案:

答案 0 :(得分: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 演示

答案 1 :(得分: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个表并使用其他一些选择条件。你确实需要提出正确的问题。不要试图在暗示另一个人的同时问一件事。