PHP/MYSQL实现按字母检索

1 篇文章 0 订阅

方法一:建一个拼音表 t_cosler ,存放每个字母开头的第一个汉字的编号和最后一个汉字的编号。   
BatchFile code+------+--------+-------+  
| f_PY | cBegin | cEnd  |  
+------+--------+-------+  
| A    |  45217 | 45252 |  
| B    |  45253 | 45760 |  
.....  
| Z    |  54481 | 55289 |  
+------+--------+-------+  
 
 
然后直接查询就行了。   
 
SQL codemysql> create table t_cosler(  
    ->  f_PY char primary key,  
    ->  cBegin  SMALLINT UNSIGNED not null,  
    ->  cEnd    SMALLINT UNSIGNED not null  
    -> );  
Query OK, 0 rows affected (0.09 sec)  
 
mysql> insert into t_cosler values  
    -> ('A',0xB0A1,0xB0C4),  
    -> ('B',0xB0C5,0xB2C0),  
    -> ('C',0xB2C1,0xB4ED),  
    -> ('D',0xB4EE,0xB6E9),  
    -> ('E',0xB6EA,0xB7A1),  
    -> ('F',0xB7A2,0xB8C0),  
    -> ('G',0xB8C1,0xB9FD),  
    -> ('H',0xB9FE,0xBBF6),  
    -> ('J',0xBBF7,0xBFA5),  
    -> ('K',0xBFA6,0xC0AB),  
    -> ('L',0xC0AC,0xC2E7),  
    -> ('M',0xC2E8,0xC4C2),  
    -> ('N',0xC4C3,0xC5B5),  
    -> ('O',0xC5B6,0xC5BD),  
    -> ('P',0xC5BE,0xC6D9),  
    -> ('Q',0xC6DA,0xC8BA),  
    -> ('R',0xC8BB,0xC8F5),  
    -> ('S',0xC8F6,0xCBF9),  
    -> ('T',0xCBFA,0xCDD9),  
    -> ('W',0xCDDA,0xCEF3),  
    -> ('X',0xCEF4,0xD188),  
    -> ('Y',0xD1B9,0xD4D0),  
    -> ('Z',0xD4D1,0xD7F9);  
Query OK, 23 rows affected (0.16 sec)  
Records: 23  Duplicates: 0  Warnings: 0  
 
mysql> select * from  o_personnel;  
+------+------------+  
| A_Id | A_UserName |  
+------+------------+  
|    1 | 首先       |  
|    2 | 检查       |  
|    3 | 我们       |  
|    4 | 的二       |  
|    5 | 进制       |  
|    6 | 是否       |  
|    7 | 适合       |  
|    8 | 你的       |  
|    9 | 平台       |  
+------+------------+  
9 rows in set (0.00 sec)  
 
mysql> select p.*,c.*  
    -> from o_personnel p , t_cosler c  
    -> where  CONV(HEX(left(A_UserName,1)),16,10) between c.cBegin and c.cEnd;  
+------+------------+------+--------+-------+  
| A_Id | A_UserName | f_PY | cBegin | cEnd  |  
+------+------------+------+--------+-------+  
|    4 | 的二       | D    |  46318 | 46825 |  
|    2 | 检查       | J    |  48119 | 49061 |  
|    5 | 进制       | J    |  48119 | 49061 |  
|    8 | 你的       | N    |  50371 | 50613 |  
|    9 | 平台       | P    |  50622 | 50905 |  
|    1 | 首先       | S    |  51446 | 52217 |  
|    6 | 是否       | S    |  51446 | 52217 |  
|    7 | 适合       | S    |  51446 | 52217 |  
|    3 | 我们       | W    |  52698 | 52979 |  
+------+------------+------+--------+-------+  
9 rows in set (0.00 sec)  
 
mysql>  
 
 
查S开头的   
SQL codemysql> select p.*  
    -> from o_personnel p , t_cosler c  
    -> where  CONV(HEX(left(A_UserName,1)),16,10) between c.cBegin and c.cEnd  
    -> and c.f_PY='S';  
+------+------------+  
| A_Id | A_UserName |  
+------+------------+  
|    1 | 首先       |  
|    6 | 是否       |  
|    7 | 适合       |  
+------+------------+  
3 rows in set (0.00 sec)  
 
mysql>  
 
 
方法二:不用这个t_cosler表,直接写个函数权限汉字得到拼音。   
 
局限性: 以上方法,均依照汉字区位表来实现,对区位后面的复杂字,无法准确判断,对多音字无法准确判断。   
 
方法三:从微软拼音中导出所有汉字的拼音表 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值