MySQL加入LIKE语句

时间:2016-05-17 07:30:54

标签: mysql join sql-like owncloud

我需要计算数据库中每个组中有多少用户。遗憾的是,数据库设计并不好,用户uid存储在LONGTEXT字段列名owncloudusers的组表中的组中。 owncloudusers数据示例:

  

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

我以为我可以在联接中使用带有LIKE的查询来比较用户的uid并查看自己的内容并查看是否存在匹配。

我最接近的是:

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表保存用户数据。 column owncloud_name是用户uid列

我尝试了一些我在LIKE join和LIKE上的stackoverflow CONCAT上找到的方法('%:"' + T2.owncloud_name +'&#34 ;;% ')

但没有快乐。我当前的声明给所有组返回了0个用户,但我知道这不对。

我知道的很多但是关于加入的问题不确定下一步该怎么做。

非常感谢任何帮助。

3 个答案:

答案 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;

如果你需要连续尝试

    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;

答案 1 :(得分: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;

答案 2 :(得分: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;