Php MYSQL:使用LIKE的子查询
大家好,我想知道我如何才能实现对总成员的输出 这是一个问题Php MYSQL:使用LIKE的子查询,php,mysql,sql,Php,Mysql,Sql,大家好,我想知道我如何才能实现对总成员的输出 这是一个问题 SELECT field1, field2, (select count(*) from table2 as t2 where t2.field5 LIKE '%' + t1.field2 + '%') as total_row FROM table1 as t1 ORDER BY total_row DESC 我想知道如何嵌入like语句,因为field5有一个或多个
SELECT
field1,
field2,
(select count(*)
from table2 as t2
where t2.field5 LIKE '%' + t1.field2 + '%') as total_row
FROM table1 as t1 ORDER BY total_row DESC
我想知道如何嵌入like语句,因为field5有一个或多个用逗号分隔的数据作为字符串
例:field5有“猫、狗、老鼠”
所以field2正在寻找像“狗”这样的总行数
希望您能帮助我。假设逗号后没有空格,您需要执行以下操作:
select field1, field2, (
select count(*)
from table2 as t2
where t2.field5 = t1.field2
or t2.field5 like t1.field2 + ',%'
or t2.field5 like '%,' + t1.field2 + ',%'
or t2.field5 like '%,' + t1.field2
) as total_row
from table1 as t1
order by total_row desc
在每个字段的前面和后面连接逗号:
SELECT field1
,field2
,( SELECT COUNT(*)
FROM table2 as t2
WHERE ','+t2.field5+',' LIKE '%,' + t1.field2 + ',%') as total_row
FROM table1 as t1 ORDER BY total_row DESC
不确定上述功能是否在MySQL中工作,可能需要CONCAT()
:
请记住,在大型表上,类似通配符的搜索速度非常慢(因为它们必须搜索表的全部内容)。在某个时候,您需要将这个“tag”字段拆分成一个单独的表。
SELECT field1
,field2
,( SELECT COUNT(*)
FROM table2 as t2
WHERE CONCAT(',',t2.field5,',') LIKE CONCAT('%,',t1.field2,',%') as total_row
FROM table1 as t1 ORDER BY total_row DESC