MySQL查询按顺序列出包含用户提交字母的单词

Dav*_*vid 3 php mysql

我有这个MySQL包含单词列表的表:

desc words;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| word    | varchar(255) | NO   |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

我还有一个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>
Run Code Online (Sandbox Code Playgroud)

是否可以创建一个MySQL查询来按照外观的顺序获取包含三个字母的单词?

例如,如果我们有话

adams
damn
mad
Run Code Online (Sandbox Code Playgroud)

...并且用户提交字母"a","d","m"它应该只给出结果

adams
Run Code Online (Sandbox Code Playgroud)

因为第一个提交的信件是"a",第二个提交的信件是在"a"之后等等(即使其间有其他字母).

或者使用单词排序更容易PHP?如果是这样,怎么样?我是初学程序员.

G-N*_*get 5

好吧,无论如何都不会有效率,但以下应该完成工作:

$string = '%' . implode('%', $letters) . '%';
$query = "SELECT word FROM words WHERE word LIKE '$string'";
Run Code Online (Sandbox Code Playgroud)

无论字母之间是否有任何内容,只要它们以正确的顺序出现,这都将起作用.它还允许指定不同数量的字母.

编辑:也 $letters需要为查询构建.具体到这个例子,它可以像这样构建:

$vars = array('first_letter', 'second_letter', 'third_letter');
foreach($vars as $var){
    if($_POST[$var]){
        $letters[] = $_POST[$var];
    }
}
Run Code Online (Sandbox Code Playgroud)

如果POST变量名称已更改为letters[],则可以将过程简化为:

foreach($_POST['letters'] as $letter){
    if($letter){
        $letters[] = $letter;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有进入此数据的数据也应该被验证/转义,但这超出了本问题的范围.

  • **你的代码容易受到SQL注入攻击.**你*真的*应该使用[预备语句](http://stackoverflow.com/a/60496/623041),你将变量作为参数传递到其中没有得到SQL的评估.如果您不知道我在说什么,或者如何解决它,请阅读[Bobby Tables]的故事(http://stackoverflow.com/q/332365/623041). (2认同)