sql语句中能否直接把截取的字符串当作where条件

WBOY
Release: 2016-06-23 14:17:28
Original
1911 people have browsed it

MySQL

例如这样的
select `id` from `table`  where  left(`flag`,1)=1;


我是有一串名为flag的标识用于表示该商品的各种属性, 10位数Int, 例如1100000000。
然后比如第一个数字1表示该商品价格区间在100-200元。
然后我想从表中搜出这个flag中取出第一个数字为1的商品
这个可以实现么, 仅仅用mysql

回复讨论(解决方案)

select `id` from `table`  where  left(`flag`,1)='1'

你的sql不就是吗??

晕。。。我感觉像是这样写的, 我试了几次没成功
是我where条件写错了

另外我想问下, 这样的sql语句性能怎么样呢

select `id` from `table`  where  left(`flag`,1)='1'

我想问下, 这样的sql语句性能怎么样呢

性能应该不怎么样 用到函数了

性能就不怎样了,因为不能使用索引写作这样才可以使用索引(如果有的话)select `id` from `table`  where  `flag` like '1%'
Copy after login
Copy after login

你这是要做商品筛选吧 用你这个方法你有没有想过以后要是增加属性 你以前的数据怎么办

性能就不怎样了,因为不能使用索引写作这样才可以使用索引(如果有的话)select `id` from `table`  where  `flag` like '1%'
Copy after login
Copy after login

是给flag字段加索引么, like的效率比left还高啊?

你这是要做商品筛选吧 用你这个方法你有没有想过以后要是增加属性 你以前的数据怎么办
我是在想比如商品有10个属性吧, 我flag字段中每个属性对应一个数字, 我现在只用到了前两个, 后边的我自动补0, 以后用到了再赋值。 您有什么更好的做分类的方法么

建一个属性表 aid 属性
一个商品表 gid
一个对应表 aid gid 对应边里aid 和gid 都可以索引 扩展属性的时候只要编辑属性表就可以了

只要 like 的匹配串左端不是变数,那么就可以使用到索引对于 1,2,11 所以后是 1,11,2like '1%' 总是会快速取出 1,11 的,因为他们聚集在一起
Copy after login

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!