Mysql 获取某一特定月份某一类别的畅销书
我想得到一个特定类别的3个最畅销的商品,如果在那个特定的月份有任何售出的商品的话 当我跑的时候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'
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