2015-10-06 57 views
2

與concated值字段相關的我有2個表如何獲得COUNT和INNER JOIN在MySQL

table A 

tag_id | Tag_name 

1  | tg1 
2  | tg2 
3  | tg3 
4  | tg4 

表B中

id | name |tag_id 

1 | avq | 1,2,4 
2 | bdq | 2 
3 | abc | 3,2 
4 | vdf | 1,4 
5 | zxc | 3 

我想內加入兩個表,並得到其計數使用tag_id以下格式

`tg1=> 2,tg2=> 3,tg3=> 2,tg4=> 2` 

怎麼可能在一個單一的MySQL查詢

+3

你真的需要表B正常化到的東西,具有每隻有一個標籤行。在目前的狀態下很難做任何事情。 – 2015-10-06 08:19:47

回答

2

最好的選擇是標準化第二個表並創建關聯表以存儲標記ID和第二個表的標識。與此同時以下應該做的工作,但長期來看,你需要規範化表其他更多的問題將在未來的

select 
t1.Tag_name, count(*) as total 
from tableA t1 
join tableB t2 on find_in_set(t1.tag_id,t2.tag_id) > 0 
group by t1.tag_id ; 
發生
+0

謝謝Abhik Chakraborty – Puppuli

0

您需要創建關係表。例如:

Tag table: 
+----+----------+ 
| id | name  | 
+----+----------+ 
| 1 | Tag name | 
+----+----------+ 
| 2 | Tag 2 | 
+----+----------+ 

B Table: 
+----+-----------+ 
| id | title  | 
+----+-----------+ 
| 1 | Any title | 
+----+-----------+ 

Reference table ex. : 

+------+--------+ 
| b_id | tag_id | 
+------+--------+ 
| 1 | 1  | 
+------+--------+ 
| 1 | 2  | 
+------+--------+ 

在您的參考表中,您爲一個B元素添加了許多標籤。在本例中,您看到通過引用分配了兩個標籤b_id = 1

0
select tag_name, count(position) 
from (
select a.tag_name, FIND_IN_SET(a.tag_id,b.tag_id) as position 
from a,b 
) as tmpTB 
where position !=0 
group by tag_name 
+0

你可以加一點解釋嗎? – Will