MYSQL精确搜索和PHP数组操作的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MYSQL精确搜索和PHP数组操作的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3451字,纯文字阅读大概需要5分钟。
内容图文
![MYSQL精确搜索和PHP数组操作的问题](/upload/InfoBanner/zyjiaocheng/235/ac8250f821c24feb99d1dff4dea814f8.jpg)
php php,mysql jquery html php ruby java,jquery,js java html css
我希望能通过mysql一次搜索出所有不重复的tag,就像这样的结果
php mysql jquery html ruby java css
如果一次搜索不出来的话通过尽可能简单的PHP数组操作一下也行,请高手指点
回复内容:
mysql中的TAG字段包含如下情况
php php,mysql jquery html php ruby java,jquery,js java html css
我希望能通过mysql一次搜索出所有不重复的tag,就像这样的结果
php mysql jquery html ruby java css
如果一次搜索不出来的话通过尽可能简单的PHP数组操作一下也行,请高手指点
额,一个SQL操作成功貌似对我难度有点大,我的想法是:
- 先老老实实的读取
code: SELECT * FROM tag result example: $result = array('php','php,mysql','jquery','html','php','ruby','java,jquery,js','java','html','css');
- 利用implode函数连接数组变成字符串(连接用的字串为,)
code: $result = implode(',',$result); result example: $result = 'php,php,mysql,jquery,html,php,ruby,java,jquery,js,java,html,css';
- 利用explode函数剪断字符串重新变成数组(剪断用的字串为,)
code: $result = explode(',',$result); result example: $result = Array ( [0] => php [1] => php [2] => mysql [3] => jquery [4] => html [5] => php [6] => ruby [7] => java [8] => jquery [9] => js [10] => java [11] => html [12] => css );
- 最后利用array_unique 函数去除重复值即可
code: $result = array_unique($result); result example: $result = Array ( [0] => php [2] => mysql [3] => jquery [4] => html [6] => ruby [7] => java [9] => js [12] => css )
我的理解是你的表中个别记录存在用“,”分隔的tag,但是你在查询SQL时希望将“,”分隔的tag像独立记录那样查询,并去重。
我说下我在SQL里处理这个事情的思路,当然如果数据量大的话性能肯定很差,因为涉及到太多的字符串操作,而本身mysql不支持split。如果使用一条SQL把它查出来,首先需要总结你的数据的规律,比如你的记录中含有“,”分隔的tag数最多有多少个,我下面的代码假设根据你的数据:
php php,mysql jquery html php ruby java,jquery,js java html css
中最多一条记录含有三个tag,含有两个逗号。先用代码创建你所说的场景数据:
/*!40101 SET NAMES utf8 */; create table `tags` ( `tag` varchar (150) ); insert into `tags` (`tag`) values('php'); insert into `tags` (`tag`) values('php,mysql'); insert into `tags` (`tag`) values('jquery'); insert into `tags` (`tag`) values('html'); insert into `tags` (`tag`) values('php'); insert into `tags` (`tag`) values('ruby'); insert into `tags` (`tag`) values('java,jquery,js'); insert into `tags` (`tag`) values('java'); insert into `tags` (`tag`) values('html'); insert into `tags` (`tag`) values('css');
然后执行如下SQL查询:
SELECT DISTINCT tag FROM ( SELECT DISTINCT tag FROM tags WHERE tag NOT LIKE '%,%' UNION SELECT DISTINCT SUBSTRING_INDEX(tag , ',', 1) AS tag FROM tags WHERE tag LIKE '%,%' UNION SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING(tag ,INSTR(tag ,',')+1),',', 1) AS tag FROM tags WHERE SUBSTRING(tag ,INSTR(tag ,',')+1) LIKE '%,%' UNION SELECT DISTINCT SUBSTRING_INDEX(tag , ',', -1) AS tag FROM tags WHERE tag LIKE '%,%' ) t
可以得到结果:
tag php jquery html ruby java css mysql js
方法很笨,分别通过四次查询得到结果后合并去重,分别是
- 查询无逗号分隔的记录中的所有tag并去重(去重的目的是减少合并时的数据量);
- 查询有逗号分隔的记录中的第一个tag,然后去重;
- 查询有逗号分隔的记录中的第二个tag,然后去重;
- 查询有逗号分隔的记录中的第三个tag,然后去重;
- 合并以上所有记录后再次去重,得到结果;
一个复合SQL就得到了结果,当然这个SQL的扩展性很差,性能也不好,如果你的数据格式做了变化,甚至单条记录中的逗号数更多的时候,这条SQL就game over了。建议通过sp来动态实现,这样可以更好的适应单条记录中tag规模的增长,否则像我上面那样,逗号一多就崩溃了。如果是在php或java里做这个事情,我相信方便的多。
为什么不用 group by
内容总结
以上是互联网集市为您收集整理的MYSQL精确搜索和PHP数组操作的问题全部内容,希望文章能够帮你解决MYSQL精确搜索和PHP数组操作的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。