继续高分求助。

ted 2012-05-30 11:15:41
需求如下:
表中现有来电字段caller
另有状态字段status

前台显示时,如果status = 付费查看
则caller的电话号码显示为1331234****(后4位隐藏)

通话记录有个搜索功能
其中caller支持模糊搜索

现在假如有两个号码
13356781234和1331234****(****为5678,只是模板显示为****,数据库为13312345678)
问我在模糊搜索5678时,如何根据status = 付费查看来判断
只搜出来第一个,而不搜出来第二个
...全文
178 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ci1699 2012-05-30
  • 打赏
  • 举报
回复
amani11 那样可以啊
这样不行吗?



WHERE (status = '付费查看' AND SUBSTR(field, 1, LENGTH(field)-4) like '%……%') OR (status != '付费查看' AND caller like '%…%')

ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

请问这个不是数字,是什么?

我说的length说你的需求全是单字节字符,

[/Quote]

脑子上午迷迷糊糊的不清醒
下面的这个问题不要忽略啊?

而且查询是所有状态都查出来的
只是查询的时候判断下status=付费就不查后4位,否则就都查
如果区分status=付费和其它两个状态查询
那我就不需要来求助了……
amani11 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 12 楼 的回复:

LEFT函数一样的哦,获取字段长度,去掉后面4位

你这里全是数字,length就可以啦


057112345678
这个就不是数字了吧
而且查询是所有状态都查出来的
只是查询的时候判断下status=付费就不查后4位,否则就都查
如果区分status=付费和其它两个状态查询
那我就不需要来求助了……
[/Quote]

请问这个不是数字,是什么?

我说的length说你的需求全是单字节字符,
ted 2012-05-30
  • 打赏
  • 举报
回复
好纠结啊,不知道自己描述清楚了没。
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

LEFT函数一样的哦,获取字段长度,去掉后面4位

你这里全是数字,length就可以啦
[/Quote]

057112345678
这个就不是数字了吧
而且查询是所有状态都查出来的
只是查询的时候判断下status=付费就不查后4位,否则就都查
如果区分status=付费和其它两个状态查询
那我就不需要来求助了……
amani11 2012-05-30
  • 打赏
  • 举报
回复
LEFT函数一样的哦,获取字段长度,去掉后面4位

你这里全是数字,length就可以啦
amani11 2012-05-30
  • 打赏
  • 举报
回复
就不能变通一下哦

SUBSTR(field, 1, LENGTH(field)-4) like '%……%'

至于是否付费,那是你在php代码中控制SQL语句
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

只出现在结尾的 like '%5678'
只出现在开头的 like '133%'

mysql 有正则表达式,你可以使用

你的需求描述的不大清楚
[/Quote]

需求就是status为付费查看时,like不能匹配后4位数字
当status为其它状态时,like可以匹配所有
以上两者结果都要查找出来,没有判断条件status
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

WHERE (status ='付费查看' && LEFT(caller,7) like '%…%') OR (status !='付费查看' caller like '%…%')

这个意思?
[/Quote]

电话号码长度不等,不能用left(caller, 7)
需要除去后4位。
ci1699 2012-05-30
  • 打赏
  • 举报
回复
上面()里都用 AND 才对 
xuzuning 2012-05-30
  • 打赏
  • 举报
回复
只出现在结尾的 like '%5678'
只出现在开头的 like '133%'

mysql 有正则表达式,你可以使用

你的需求描述的不大清楚
ci1699 2012-05-30
  • 打赏
  • 举报
回复
WHERE (status ='付费查看' && LEFT(caller,7) like '%…%') OR (status !='付费查看' caller like '%…%')

这个意思?
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

仅搜前7位呗,WHERE LEFT(caller,7) like '%…%'
[/Quote]

而且电话号码长度不等,主要是当status = 付费查看时,不搜后4位,只搜前面
当status != 付费查看时,所有的都要搜
这两个结果是混合显示的,就是说不管status的值是什么,全部都找出来
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

仅搜前7位呗,WHERE LEFT(caller,7) like '%…%'
[/Quote]

仅搜前7位是不行的,因为status不等于‘付费查看’的结果也要搜出来。
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code
select * from table where table.column like '%5678%' and status ='付费查看'
[/Quote]

貌似我描述的不是很清楚
我的意思是查找时所有的status都要查
当查找5678时,只出来第一个,找不到第二个
当搜索133时,第一个和第二个都要出来
所以就不能用status != 付费查看这一个条件来判断
amani11 2012-05-30
  • 打赏
  • 举报
回复
仅搜前7位呗,WHERE LEFT(caller,7) like '%…%'
andyxl 2012-05-30
  • 打赏
  • 举报
回复
select * from table where table.column like '%5678%' and status ='付费查看'
ted 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
amani11 那样可以啊
这样不行吗?



WHERE (status = '付费查看' AND SUBSTR(field, 1, LENGTH(field)-4) like '%……%') OR (status != '付费查看' AND caller like '%…%')
[/Quote]

正是我想要的结果,十分感谢!

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧