MySQL查询中的IF语句

MySQL查询中的IF语句,mysql,if-statement,Mysql,If Statement,我需要帮助。我有一个疑问: SELECT IF(book_id=2, 'NTR', if(book_id=5,'CBC', if(book_id=1,'CBC','Repair')) AS 'STATUS', COUNT(IF(book_id=2, 'NTR', if(book_id=5,'CBC', if(book_id=1,'CBC','Repair'))) AS 'TOTAL' FROM book_entry AS b WHERE last_updated=(SELECT last

我需要帮助。我有一个疑问:

SELECT IF(book_id=2, 'NTR', if(book_id=5,'CBC', if(book_id=1,'CBC','Repair')) AS   
'STATUS',
COUNT(IF(book_id=2, 'NTR', if(book_id=5,'CBC', if(book_id=1,'CBC','Repair'))) AS 
'TOTAL'
FROM book_entry AS b
WHERE last_updated=(SELECT last_updated FROM book_entry WHERE book_code=b.book_code ORDER  
BY last_updated DESC) AND (SELECT description FROM book_categori AS c, book_item AS i  
WHERE c.id=i.id AND i_item_code=b.item_code) = "NOVEL" 
GROUP BY IF(book_id=2, 'NTR', if(book_id=5,'CBC', if(book_id=1,'CBC','Repair')))
此表的总数据为128。实际上,有3种以上的状态,但我只想得到3种状态(NTR、CBC和其他状态,我将其分组为1种状态,我将其设置为“修复”)。根据我在上面创建的查询,我得到了以下结果:

STATUS      TOTAL
---------------
CBC         70
Repair      58
这不是我想要的结果。我想要的是这样的:

STATUS      TOTAL
-----------------
CBC         70
Repair      58
NTR         0
实际上,“NTR”没有id,这意味着id=2实际上是空的,但我想在上面的结果中包含它


有人能告诉我需要在查询中更改什么才能得到结果吗?

看起来您需要一个状态表,其中包含status\u id int、status varchar等字段

添加CBC、NTR和维修记录

然后在book_条目中添加status_id列,并根据需要进行更新

然后您的查询可以连接到状态表-类似于:

select status.status, count(*) total
from status left join book_entry 
on status.status_id = book_entry.status_id
join book_categori 
on book_entry.item_code = book_categori.i_item_code
where book_categori.description = 'NOVEL'
group by status.status
(无法理解您试图对where子句的第一部分做什么

last_updated=(SELECT last_updated FROM book_entry WHERE book_code=b.book_code 
ORDER BY last_updated DESC) 

我认为除了使查询更难阅读之外,它不会有任何影响。

如果您根据图书条目进行查询,则无法显示“NTR 0”因为不存在任何具有该id的条目。请创建一个关于您的类别的键入表,在其中存储类别名称:CBC、Repair、NTR等。感谢您的帮助,但我已经找到了解决此问题的其他解决方案。我更改了查询,其中我没有使用IF语句来获得结果,但我使用UNION来组合我想要的所有数据d幸运的是它起作用了。呵呵。。