返回第一个字符为alpha且等效于重音字符的行

时间:2013-08-21 16:01:11

标签: php mysql

我正在寻找一个查询,该查询将返回名称的第一个字母字符以变量中给出的字母开头的行。它还应包括非重音字符的等效项。

以mySQL中的

表为例:

id    name
--------------------------
25    Como yo te quiero
57    Me quieres
34    Ahora
45    África
568   No me mires
78    ¿A que?
89    Y sin embargo
5     ¡... A que no!
34    ...A la madre
85    Por que
51    A mi manera

PHP文件:

// alpha letter to search in the name
$char = $_GET['char'];

// layout of the query
$sql = 'SELECT song_id, name FROM song WHERE song.name starts with ?';

$conn = connect('read');
$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('s', $char);
$stmt->execute();
$stmt->bind_result($songid, $name);
$stmt->fetch();
$stmt->free_result();
$stmt->close();
$conn->close();

如果$ char等于'a',那么结果集应该返回名称中第一个字母以 a A 开头的所有行áÁ等...

输出:

34    Ahora
45    África
78    ¿A que?
5     ¡... A que no!
34    ...A la madre
51    A mi manera

如果$ char等于'e',则结果集应返回名称中第一个字母以 e E 开头的所有行éÉ等...

如果$ char等于'p',那么结果集应返回名称中第一个字母以 p

开头的所有行

依旧......

查询是什么?我是否需要某种对话表来告诉PHP哪些字符等同于a,e,o等...?

1 个答案:

答案 0 :(得分:2)

此查询适用于我的测试场景:

SELECT `name` FROM `test` WHERE `name` REGEXP '^[^\x00-\x7F]*a'

或者创建一个数组,例如:

$replacements = array(
    'a' => array('a','Á')
    ,'b'...//etc
);

然后使用implode('|',$replacements[$char])创建如下语句:

SELECT `name` FROM `test` WHERE `name` REGEXP '^[^\x00-\x7F]*(a|Á)'

^[^\x00-\x7F]*正在寻找开头的任何非ASCII字符(然后是a)

SQL Fiddle