MySQL 加入 LIKE 语句
MySQL Join on LIKE statement
我需要计算数据库中每个组中有多少用户。不幸的是,数据库设计不是很好,用户 uid 存储在组 table 中的 LONGTEXT 字段列名称 owncloudusers 中。
owncloudusers 数据示例:
{i:0;s:36:"25C967BD-AF78-4671-88DC-FAD935FF1B26";i:1;s:36:"40D6866B-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 table 保存分组以及谁被标记到该组
T2 table 保存用户数据。 column owncloud_name 是用户 uid column
我尝试了一些在 Whosebug 上找到的方法 CONCAT on the LIKE join and LIKE('%:"'+T2.owncloud_name+'";%')
但没有快乐。当前声明我有 returns 0 个用户反对所有组,但我知道这是不对的。
我很了解它,但加入时遇到问题不知道下一步该去哪里。
如有任何帮助,我们将不胜感激。
我认为你需要一个简单的
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;
您很接近,但是 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;
如果没有任何性能问题,
你能用子查询试试吗,
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;
我需要计算数据库中每个组中有多少用户。不幸的是,数据库设计不是很好,用户 uid 存储在组 table 中的 LONGTEXT 字段列名称 owncloudusers 中。 owncloudusers 数据示例:
{i:0;s:36:"25C967BD-AF78-4671-88DC-FAD935FF1B26";i:1;s:36:"40D6866B-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 table 保存分组以及谁被标记到该组 T2 table 保存用户数据。 column owncloud_name 是用户 uid column
我尝试了一些在 Whosebug 上找到的方法 CONCAT on the LIKE join and LIKE('%:"'+T2.owncloud_name+'";%')
但没有快乐。当前声明我有 returns 0 个用户反对所有组,但我知道这是不对的。
我很了解它,但加入时遇到问题不知道下一步该去哪里。
如有任何帮助,我们将不胜感激。
我认为你需要一个简单的
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;
您很接近,但是 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;
如果没有任何性能问题, 你能用子查询试试吗,
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;