我正在寻找一个查询,该查询将返回名称的第一个字母字符以变量中给出的字母开头的行。它还应包括非重音字符的等效项。
以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等...?
答案 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)