varchar 和 int 不能同时针对一个字符串值进行精确查询?!

2017-09-27 22:14:37 +08:00
 iscraft
CREATE TABLE `user` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `real_name` varchar(10) NOT NULL,
 `tel` varchar(25) DEFAULT NULL,
 `rid` int(10) DEFAULT NULL,
 `status` tinyint(1) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=207 DEFAULT CHARSET=utf8

原意是用户在一个 input 里面输入姓名或者电话或者证件号码都能查询登录

使用

SELECT * FROM `user` WHERE (real_name='刘大军' or tel='刘大军' or `rid`='刘大军') and status='1'    

会获取到连同正确的那条在内的一共 3 条记录 结果不唯一 显然不对

而使用

SELECT * FROM `user` WHERE (`real_name` like '%刘大军%' or `tel` like '%刘大军%' or `rid` like '%刘大军%') and `status`='1'    

则能获取唯一的一条正确的记录

但是感觉 like 不是很严谨
网上搜索了好一阵子
也找不到 varchar 和 int 针对一个字符串值精确匹配的相关文章
虽然我也知道 int 是面向整数的
第一条语句怎么写才能准确的用 real_name 和 tel 匹配姓名字符串 而使用 rid 来匹配纯数字的证件号呢?
求解惑

2988 次点击
所在节点    MySQL
1 条回复
msg7086
2017-09-27 23:00:41 +08:00
if rid 是数字
select 三个条件
else
select 两个条件

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/394177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX