0

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

以 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',则结果集应返回名称中第一个字母以aAáÁ等开头的所有行...

输出:

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

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

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

等等...

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

4

1 回答 1

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小提琴

于 2013-08-21T16:32:46.663 回答