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' の場合、結果セットは、名前の最初の英字がaまたはAまたはáまたはÁなどで始まるすべての行を返す必要があります。

出力:

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で始まるすべての行を返す必要があります

等々...

クエリは何ですか? どの文字が a 、 e 、 o などに相当するかを PHP に伝えるために、ある種の会話テーブルが必要ですか?

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 に答える