2017-09-02 56 views
1

我有一個表中有一個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

回答

0

你可以這樣做:

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

0

在你的問題是不明確的,如果你的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) 
相關問題