我有这个包含单词列表的 MySQL
表:
desc words;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| word | varchar(255) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
我还有一个 HTML
表单,其中包含三个输入字段,用户应在其中输入三个字母:
<form action='load.php' method='post'>
<input type='text' name='first_letter'>
<input type='text' name='second_letter'>
<input type='text' name='third_letter'>
<input type='submit' name='submit'>
</form>
是否可以创建一个 MySQL
查询来获取包含单词中出现顺序的三个字母的单词?
例如,如果我们有的话
adams
damn
mad
...并且用户提交字母“a”、“d”、“m”它应该只给出结果
adams
因为第一个提交的字母是“a”,第二个提交的字母在“a”之后,依此类推(即使中间还有其他字母)。
或者使用 PHP
对单词进行排序是否更容易?如果是这样,如何?我是一名初级程序员。
最佳答案
好吧,它无论如何都不会高效,但以下应该可以完成工作:
$string = '%' . implode('%', $letters) . '%';
$query = "SELECT word FROM words WHERE word LIKE '$string'";
无论字母之间是否有任何东西,只要它们以正确的顺序出现,这都会起作用。它还允许指定不同数量的字母。
编辑:
$letters
也需要为查询构建。具体到这个例子,可以这样构建:
$vars = array('first_letter', 'second_letter', 'third_letter');
foreach($vars as $var){
if($_POST[$var]){
$letters[] = $_POST[$var];
}
}
如果将 POST
变量名更改为 letters[]
,则该过程可以简化为:
foreach($_POST['letters'] as $letter){
if($letter){
$letters[] = $letter;
}
}
进入此的所有数据也应该经过验证/转义,但这超出了这个问题的范围。
关于php - MySQL查询按顺序列出包含用户提交的字母的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13961932/