Mysql 获取某一特定月份某一类别的畅销书

Mysql 获取某一特定月份某一类别的畅销书,mysql,sql,Mysql,Sql,我想得到一个特定类别的3个最畅销的商品,如果在那个特定的月份有任何售出的商品的话 当我跑的时候 SELECT io.item_name, COUNT(io.item_name) AS number_sold FROM category_tbl AS c LEFT JOIN item_out_tbl AS io ON io.category_id = c.category_id AND c.category_id = '$category_id'

我想得到一个特定类别的3个最畅销的商品,如果在那个特定的月份有任何售出的商品的话

当我跑的时候

SELECT  io.item_name,  
    COUNT(io.item_name) AS number_sold  
FROM  category_tbl AS c   
    LEFT JOIN item_out_tbl AS io ON io.category_id = c.category_id
        AND c.category_id = '$category_id'
    LEFT JOIN sales_tbl    AS sa ON io.item_id = sa.item_id                               
        AND '$current_month'=MONTH(date_sold) 
GROUP BY  io.item_name 
ORDER BY number_sold DESC 
LIMIT 3
即使MONTHdate_销售的金额不等于$current_month,“$current_month”=MONTHdate_销售的金额被忽略,我也会得到结果。我希望结果为空,因为我没有与$current\u month的商品名称匹配的商品名称,因为您使用的是left join,所以如果等效值不存在,则从联接表中获取NULL,因此只需添加WHERE sa.item\u id not NULL子句:

你的左连接似乎没有必要。解决问题的更好方法就是使用内部联接:

SELECT  io.item_name, COUNT(io.item_name) AS number_sold  
FROM item_out_tbl io JOIN
     category_tbl c   
     ON io.category_id = c.category_id AND c.category_id = '$category_id' JOIN
     sales_tbl sa
     ON io.item_id = sa.item_id AND                            
        $current_month' = MONTH(date_sold) 
GROUP BY io.item_name 
ORDER BY number_sold DESC 
LIMIT 3
“$current\u month”=MONTHdate\u卖出掉期:MONTHdate\u卖出=“$current\u month”。
SELECT  io.item_name, COUNT(io.item_name) AS number_sold  
FROM item_out_tbl io JOIN
     category_tbl c   
     ON io.category_id = c.category_id AND c.category_id = '$category_id' JOIN
     sales_tbl sa
     ON io.item_id = sa.item_id AND                            
        $current_month' = MONTH(date_sold) 
GROUP BY io.item_name 
ORDER BY number_sold DESC 
LIMIT 3