mysql字符串包含问题

问题描述

字段 ATTRACTIONS(观光点,景点) varchar类型,数据格式为159,160,161,162,163,用逗号分割,每一个都为景点的ID,现在页面传入的查询条件也是以逗号分割,假如为159,160,161,现在要查询表中包含159,160,161这几个景点的记录。不能用like,因为页面传入的条件可能是161,159,160,这样159,160,161,162,163这条记录实际是包含以上景点的,但这样是查不出来的。请教大家这样该怎么处理

解决方案

可以这样,在保存前把159,160,164,163,162进行一下从小到大的的排序,转换成159,160,162,163,164,然后再保存。以后要查询时,再将查询条件159,162,160进行一次排序转换成159,160,162,最后再拼接成 like '%159,160,162%',这样去查询可能会对查询速度提高不少。 如果对于159,160,164,163,162这样的数据有排序需求,那就建议存到两个字段里,一个是没改变顺序的值,一个是排序过后的值,查询时对于排序过后的字段,显示时用没改变顺序的值。添加,保存的动作同时改变这两个字段值。(用空间换时间,提高查询速度)
解决方案二:
对了,由于需要考虑数据 的连续性问题还得把拼接成的SQL像: like '%159,160,162%' 改成: like '%159%160%162%'
解决方案三:
写一个FUNCTION aa(str,substr),str字段ATTRACTIONS,substr是你查询条件,aa()中,对substr逗号分隔,然后循环判断instr(str,substr分隔后的项目)
解决方案四:
把页面传过来的先按逗号分割下,然后一个个比较like '%159%' and like '%161%'......

时间: 2024-10-03 16:39:21

mysql字符串包含问题的相关文章

Mysql字符串字段判断是否包含某个字符串的2种方法

  假设有个表: 代码如下: CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),user_name VARCHAR(20) NOT NULL,emails VARCHAR(50) NOT NULL); 初始化表,并添加些记录. 代码如下: truncate table users INSERT INTO users(user_name, emails) VALUES('小张','a@email.com,b@

Mysql字符串字段判断是否包含某个字符串的2种方法_Mysql

假设有个表: 复制代码 代码如下: CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),user_name VARCHAR(20) NOT NULL,emails VARCHAR(50) NOT NULL); 初始化表,并添加些记录. 复制代码 代码如下: truncate table users INSERT INTO users(user_name, emails) VALUES('小张','a@emai

Mysql字符串处理函数详细介绍、总结

 这篇文章主要介绍了Mysql字符串处理函数详细介绍.总结,需要的朋友可以参考下 一.简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2-,sn)  将s1,s2-,sn连接成字符串 CONCAT_WS(sep,s1,s2-,sn) 将s1,s2-,sn连接成字符串,并用sep字符间隔 INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

mysql字符串函数总结

()函数可以获得一个字符串的长度: select length('abcdefg'),length('0123456789'); /* +-------------------+----------------------+ | length('abcdefg') | length('0123456789') | +-------------------+----------------------+ |                 7 |                   10 | +-

MySQL字符串函数详解(推荐)_Mysql

一.ASCII ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. 二.ORD ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码.如果最左面的字符不是一个多字节字符.返回与A

mysql 字符串函数收集比较全_Mysql

对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的 最左面字符的ASCII代码值.如果str是空字符串, 返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); -> 50mysql> select ASCII(2); -> 50mysql> select ASCII('dx'); -> 100 也可参见ORD()函数. ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以

MySQL 字符串函数大全_Mysql

MySQL 字符串函数大全 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dx'); -> 100 也可参见ORD()函数. ORD(str) 如果字符串str最左面

JS判断字符串包含的方法

 本文实例讲述了JS判断字符串包含的方法.分享给大家供大家参考.具体如下: 1. 例子: 1 2 3 4 5 6 7 8 var tempStr = "tempText" ; var bool = tempStr.indexOf("Texxt"); //返回大于等于0的整数值,若不包含"Text"则返回"-1. if(bool>0){ document.write("包含字符串"); }else{ docume

c语言-求教编写一个函数求出两个字符串包含的相同的单词

问题描述 求教编写一个函数求出两个字符串包含的相同的单词 编写一个函数,函数首部为void maxword(char *s,char *t),求出两个字符串包含的相同单词(同一字母的大小写视为不同的字符).规定单词全部由英文字母构成,单词直接由一个或多个空格分隔.其中主函数如下: #include Void main() { Char s[]="This is C programming text"; Char t[]="This is a text for C progra