2016-06-07 114 views
1

在好时代,这是容易做到的一个连接到用户 - user_comments:LEFT JOIN以JSON阵列

SELECT * FROM user LEFT JOIN user_comments WHERE user.id = user_comments.USER_ID 

users: 
1, 'name1' 
2, 'name1' 

users_comments 
user_id, comment 
1  , 'fdfddf' 
1  , 'bvvccv' 
2  , 'zxczxczxc' 

但这里谈到一个JSON阵列。用户:

1, 'username' 
2, 'username2' 

和注释:

'comment', [1] 
'comment2', [1,2] 

的第二列是一个JSON阵列。因此,除了第二列中的数组条目外,不再有记录。 (好吧,我知道它不是100%清楚,但在这个想象的例子中可以想象,评论可能属于两个用户)。

如何做一个左连接,并最好统计用户数量?

+0

你是什么意思“来了一个JSON数组”?它从何而来?它是一个存储在MySQL中的字符串吗?它是由您的应用程序提供的文字吗? MySQL中的实际数据是什么,它的结构如何?这个问题很明显是泥巴。 – eggyal

+0

赞同以上所述。这是非常不清楚的。你问你是否可以在JSON数组上执行SQL查询?如果是这样,答案是否定的。 – ADyson

+0

在评论表中,第二列是JSON类型。 –

回答

2

你想要这个吗?希望我没有把你的问题搞错;)

select c.comment, count(u.id) as userCount 
from user_comments c 
left join user u on find_in_set(u.id, replace(replace(c.USER_ID, '[', ''), ']', '')) 
group by c.comment 
+2

OP [说](http:// stackoverflow。 com/questions/37675538/left-join-to-json-array#comment62828599_37675538)该列是一个“JSON类型”,这意味着MySQL≥v5.7.8-在这种情况下['JSON_CONTAINS()'](https:/ /dev.mysql.com/doc/en/json-search-functions.html#function_json-contains)是可用的,并且会比所有这些字符串操作更好。 – eggyal