2016-06-07 112 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