php - 查询中带有选择选项的多处

标签 php mysql where-clause

我想像这样进行多选

<form method="POST" action="">
<select name="age">
<option value="">Any</option>
    <option value="0">18-20</option>
    <option value="1">21-23</option>
    <option value="2">24-27</option>
    <option value="3">28-32</option>
    <option value="4">33-39</option>
    <option value="5">40-49</option>
    <option value="6">50+</option>
</select>
<select name="gender">
    <option value="">Any</option>
  <option value="male">Male</option>
  <option value="female">Female</option>
</select>
<input type="submit" name="filtrer" value="Submit">
</form>

我的查询是这样的

$retour_messages = mysql_query('SELECT * FROM users ORDER BY id DESC LIMIT '. mysql_real_escape_string ($premiereEntree) .', '. mysql_real_escape_string ($messagesParPage) .'');

如果有人可以帮助我,我需要制作多个位置以根据我的选择对结果进行排序。

谢谢

最佳答案

您需要构建一个动态查询来执行此操作。从一个基本的 stub 开始

$sql = "SELECT * FROM users ";

然后您需要将初始子句设置为 WHERE。

 $clause = " WHERE ";//Initial clause

检查是否设置了$_POST['filtrer']

if(isset($_POST['filtrer'])){//to run PHP script on submit

然后开始使用 switch case 构建查询

//age
if(!empty($_POST['age'])){
    switch ($_POST['age']) {
    case 1:
        $sql .= "$clause (age >18 AND <20)";
        break;
    case 2:
        $sql .= "$clause (age >21 AND <23)";
        break;
    case 3:
        $sql .= "$clause (age >24 AND <27)";
        break;
    case 4:
        $sql .= "$clause (age >28 AND <32)";
        break;
    case 5:
        $sql .= "$clause (age >33 AND <39)";
        break;
    case 6:
        $sql .= "$clause (age >40 AND <49)";
        break;
    case 7:
        $sql .= "$clause age >50";
        break;      
}

将子句设置为 AND

$clause = " AND ";// Set clause to AND 
}
//gender
if(!empty($_POST['gender'])){
    switch ($_POST['gender']) {
    case 'male':
        $sql .= "$clause gender = male";
        break;
    case 'female':
        $sql .= "$clause gender = female";
        break;
}
}
$sql .=" ORDER BY id DESC LIMIT";//. mysql_real_escape_string ($premiereEntree) .", ";  
echo $sql;
}

您将需要重新编号年龄选项

<form method="POST" action="#">
<select name="age">
<option value="">Any</option>
    <option value="0">18-20</option>
    <option value="2">21-23</option>
    <option value="3">24-27</option>
    <option value="4">28-32</option>
    <option value="5">33-39</option>
    <option value="6">40-49</option>
    <option value="7">50+</option>
</select>

建议使用 PDO 或 Mysqli,因为 mysql_ 函数已弃用

关于php - 查询中带有选择选项的多处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427002/

相关文章:

php - 无法对我的 mysql 表中的某些值进行 PHP 求和,请帮助我

mysql - ALTER TABLE table_name AUTO_INCREMENT = 1000;给我语法错误

SQL、PHP - 关闭 sleep 连接

sql - dd-mm-yyyy 到 yyyy-mm-dd SQL

mysql - INSERT from SELECT 语句,列计数

php - CakePHP updateAll() 不工作

php - 使用 PHP 转义用户输入以在 PostgreSQL 正则表达式中使用?

php - Symfony2 : Where/how I can trigger my own annotation-reader?

mysql - SQL。当列不存在时左连接和空值

mysql - 选择最小值、最大值、平均值、位置