【问题标题】:Loop through MySql Table and output in Particular order with PHP循环遍历 MySql 表并使用 PHP 以特定顺序输出
【发布时间】:2013-03-18 14:16:07
【问题描述】:

下面循环遍历我的 MySql 数据库中的一个表,并在一个匹配的表格单元格中显示所有汽车记录。我知道我可以在 MySql 查询中使用 ORDER BY 命令按特定列排序,但是如何将特定记录放在顶部,然后列出所有剩余的匹配项?

例如,在此之前我有一个简单的表单,用户使用 $_POST 方法选择他们最喜欢的汽车 ($_POST['user_car']) 和所需的规格 ($_POST['user_spec'])。因此,我的查询显示了与所选规格匹配的所有记录,但我希望所选汽车位于列表的最顶部,其余汽车紧随其后。

        $query_params = array( 
            ':spec' => $_POST['user_spec']
        );

        $query = " 
            SELECT 
                *
            FROM 
                table
            WHERE
                spec=:spec
        "; 

        try { 
            $stmt = DB::get()->prepare($query); 
            $stmt->execute($query_params); 
            $rows = $stmt->fetchAll(); 
        }  
        catch(PDOException $ex) {}

        foreach($rows as $row):

            $cell .= '<td>
                          <input type="checkbox" '.$check.' name="spec[]" value="'.$row['id'].'"/><span> '.$row['spec'].'
                      </td>';
        endforeach;

【问题讨论】:

  • 将选中的值添加到ORDER BY,即SELECT.. ORDER BY car='ford' DESC, car_name。该测试将产生 1 表示匹配,0 表示不匹配

标签: php mysql loops foreach


【解决方案1】:

ORDER BY 不仅限于您可以在其中放置评估语句的列。

        SELECT 
            *
        FROM 
            table
        WHERE
            spec=:spec
        ORDER BY car_name=:user_car DESC, car_name ASC

如果用户最喜欢的车是'mini',那么car_name 为'mini'的记录将评估为1,其余为0,因此它将首先出现。 其余的汽车将按他们的名字订购。

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2023-03-22
    • 2013-04-09
    • 2016-02-27
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多