如何使用FIND_IN_SET或LOCATE或必须得到一个计数

问题描述:

我有一个表中有一个id与多个数值。如表中id = 200的值是value_id =(337,22878,4,10,99),id = 201的值是value_id =(337,22878,99)。如何使用FIND_IN_SET或LOCATE或必须得到一个计数

我使用group_concat函数来获取所有值对一个id。

现在我想有ID的总数不包含价值为4

对于我试图像

  1. COUNT许多事情(如果(FIND_IN_SET(4,GROUP_CONCAT(value_id ))> 0,1,NULL))
  2. COUNT(如果(LOCATE(4,GROUP_CONCAT(value_id))> 0,0,1))
  3. GROUP_CONCAT(value_id)AS all_data,COUNT(如果(LOCATE( 4,all_data )> 0,0,1))
  4. COUNT(如果(GROUP_CONCAT(alloc.table_id)= 4,0,1))
  5. 我使用具有也(我不想使用它,因为在存储过程 性能问题)

结果试图:我总是得到错误代码:1111无效使用组功能的

select manager_profile_id,group_concat(value_id) as all_data 
from managers 
where manager_profile_id =487 and team_id=2 
GROUP BY manager_profile_id HAVING all_data !=4 ; 
+0

真的逗号分隔值?数据库不是为逗号分隔的值而设计的...我建议你将表格归一化,你可以指望很多eazier。 –

+0

您需要计算ID的总数。哪个ID? manager_profile_id或team_id?我假设不包含的值在value_id中。 – Sal

你可以这样做:

select manager_profile_id, group_concat(value_id) as all_data 
from managers 
where manager_profile_id = 487 and team_id = 2 
group by manager_profile_id 
having sum(value_id = 4) = 0; 
+0

没有戈登,我不想总结他们我只是想检查,如果在all_data其中一个数值是存在的(假设4是存在于一个id组concat比这个id应该从我的计数中排除) – ami

+1

@ ami:这就是Gordon正在做的事情:他排除所有具有value_id的经理4. Gordon的结果与你想要的有什么不同? 'sum(value_id = 4)'只是用每个组的'value_id = 4'来计数记录。这是由于MySQL对true = 1,false = 0的处理。 –

+0

是的,我现在已经明白了,抱歉,刚刚开始使用DB,因此并不擅长如此。该解决方案非常感谢你们两位 – ami

在你的问题是不明确的,如果你的ID(例如:2 00)是一个新的列或manager_profile_id(我的查询中我使用的ID此) 您可以排除使用到valud_id = 4相关的ID的不

select 
     manager_profile_id 
     ,group_concat(value_id) as all_data 
    from managers 
    where manager_profile_id =487 and team_id=2 
    and where id not in ( select distinct id from managers where value_id = 4)