0

下面循环遍历我的 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;
4

1 回答 1

4

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

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

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

于 2013-03-18T14:23:10.957 回答