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

标签 php mysql

我有这个包含单词列表的 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/

相关文章:

php - 删除在 joomla 中不起作用的行

php - 2.2+版本的moodle开发类(class)

MySQL - 如何合并来自两个表的数据,使用一个字段的值作为过滤器来计算另一个字段中的值?

php - MySQL 错误 "no such directory or file"

mysql - 在mysql查询中结合Not In和like函数

php - 这行 PHP 是否足以防止 MySQL 注入(inject)?

php - 查询两个单独的表,在第二个查询中传递结果,而如果第二个查询返回 null,则仅保留第一个查询的结果

php - 我无法将 pdf 上传到我的 mysql 数据库

PHP - 在div中显示来自mysql文本字段的html

mysql - 在 WordPress 数据库站点中创建表时出现 500 错误