我想写一个查询,其名称的第一个字符有a或b或c或c-g

时间:2013-10-17 08:11:18

标签: php mysql

我想写一个查询,其名称的第一个字符为abcc-g。 我有按字母顺序A-Z的名称列表。我希望按3个步骤A-GG-MN-Z按字母顺序过滤。

点击A-G,记录会显示从A-G

开始的第一个字符的名称
mysql_query("select * from users where name like "A%" or name like "B%" or name like "C%" or name like "D%" or name like "E%" or name like "F%" or name like "G%"");

但我不想写几次这样的事情

所以有没有简单的方法,而不是写几次。

3 个答案:

答案 0 :(得分:6)

你可以尝试

mysql_query("select * from users where LOWER(SUBSTR(name, 1, 1)) IN ('a','b','c','d','e','f','g')");

答案 1 :(得分:5)

REGEXP可以在这里运作良好:

SELECT ........ WHERE `name` REGEXP '^[a-g]'

或者,为了更好地利用索引:

... WHERE `name` < 'G'

答案 2 :(得分:1)

有很多方法可以做到这一点:

首先:您可以使用.. OR LIKE ..语法执行此操作,就像您所描述的那样。

第二次:使用SUBSTRING()传递给IN运营商:

SELECT * FROM t WHERE SUBSTRING(name, 1,1) IN ('A', 'B', 'C')

或使用ORD()

SELECT * FROM t WHERE ORD(SUBSTRING(name, 1,1)) BETWEEN ORD('A') AND ORD('C')

第三次:使用REGEXP

SELECT * FROM t WHERE name REGEXP '^[ABC]'