2016-05-17 114 views
3

我需要統計數據庫中每個組中有多少用戶。不幸的是,數據庫設計不是很好,用戶的uid是針對LONGTEXT字段列名owncloudusers中的組表進行存儲的。 owncloudusers數據的 示例:MySQL LIKE語句加入

{I:0; S:36: 「25C967BD-AF78-4671-88DC-FAD935FF1B26」; I:1; S:36:「40​​D6866B-EA06-4F39-B509- 8CE551CC1924 「; I:2; S:36:」 7724C600-DE23-45C8-8BFD-326B0138E029​​ 「; I:3; S:36:」 D6FF37EC-11F4-471F-94C9-F3A28416CF1F「; I​​:4; S:36 :「F70C6D03-B7BA-44E4-B703-9AF3EED9BC03」;}

我以爲我可以使用查詢與LIKE在加入比較用戶的UID和往裏owncloudusers,看看是否有匹配。

我已經得到的最接近的是:

SELECT T1.owncloudname, count(T2.owncloud_name) AS Users 
FROM oc_ldap_group_members T1 
LEFT JOIN oc_ldap_user_mapping T2 ON T1.owncloudusers LIKE('%:"'||T2.owncloud_name||'";%') 
GROUP BY owncloudname; 

T1表保存分組,誰被標記到該組 T2表保存用戶的數據。列owncloud_name是用戶的UID列

我已經試過我的計算器CONCAT發現了LIKE加入和LIKE( '%: 「 '+ T2.owncloud_name +'」;%')的幾個方法

但是,沒有喜悅。目前的聲明我已經返回0個用戶反對所有組,但我知道這是不正確的。

我知道它很多,但加入的一個問題不知道下一步該去哪裏。

任何援助將不勝感激。

+0

謝謝我已經嘗試了上述的答覆,它運行沒有錯誤,但是,同樣的問題計數返回0 –

回答

2

我想你需要一個簡單的

SELECT T1.owncloudname, count(*) AS Users 
    FROM oc_ldap_group_members T1 
    LEFT JOIN oc_ldap_user_mapping T2 ON T1.owncloudusers LIKE '%T2.owncloud_name%' 
    GROUP BY owncloudname; 

如果您需要CONCAT嘗試

SELECT T1.owncloudname, count(T2.owncloud_name) AS Users 
    FROM oc_ldap_group_members T1 
    LEFT JOIN oc_ldap_user_mapping T2 ON T1.owncloudusers 
     LIKE concat('%',T2.owncloud_name,'%') 
    GROUP BY owncloudname; 
+0

嗨,謝謝你的答覆不幸的是,如果你這樣做不是簡單地嘗試讀取T2.owncloud_name作爲一個字符串,而不是我想要的uid? –

+0

我已更新答案 – scaisEdge

+0

謝謝scaisEdge你的傳奇我真的很接近我嘗試過的一些方法我錯過了,在concat doh。 –

1

你接近,但MySQL不明白||爲文本連接運算符;使用CONCAT()與作爲值的列表通過文字配件組裝LIKE操作:

SELECT T1.owncloudname, count(T2.owncloud_name) AS Users 
FROM oc_ldap_group_members T1 
LEFT JOIN oc_ldap_user_mapping T2 
    ON T1.owncloudusers LIKE CONCAT('%;', T2.owncloud_name, ';%') 
GROUP BY owncloudname; 
+0

嗨,感謝您的回覆,當我嘗試上述時,它給了我以下錯誤:操作數應該包含1列(s)。有任何想法嗎? –

+0

@N_E Ooops ...遺漏了'CONCAT()'。現在就試試。 – Bohemian

0

如果有是不是任何性能問題, 可以嘗試將其與子查詢,

SELECT 
      T1.owncloudname, 
      (SELECT COUNT(*) 
      FROM oc_ldap_user_mapping AS T2 
      WHERE LOCATE(T2.owncloud_name,T1.owncloudusers)=1) AS Users 
    FROM 
      oc_ldap_group_members T1 
    GROUP BY 
      owncloudname;