php - MySQL 相关排序

标签 php mysql

<分区>

我正在尝试找出对搜索结果进行排序的最佳方式,它们需要按如下方式排序,但它似乎不起作用。

这可能是因为正在选择列评级但用户没有填写名为评级的输入?

if(isset($_POST['search'])){
   $lname = trim($_POST['lname']);
   $address = trim($_POST['address']);
   $street = trim($_POST['street']);
   $city = trim($_POST['city']);
   $county = trim($_POST['county']);

   if($lname==""){
      $error[] = "Provide Last Name."; 
   }elseif($address=""){
       $error[] = "Provide House Number/Name.";
   }elseif($street==""){
      $error[] = "Provide Street.";
   }elseif($city==""){
       $error[] = "Provide City.";
   }elseif($county==""){
       $error[] = "Provide County.";
   }else{
       try{
           $stmt = $conn->prepare("SELECT *
           FROM clients
           WHERE  lname  like :lname
           AND   address like :address
           AND   street  like :street
           AND   city    like :city
           AND   county  like :county
           ORDER BY rating 
           WHEN rating like 'badabusive' THEN 0
           WHEN rating like 'badnopay' THEN 1
           WHEN rating like 'cautionlate' THEN 2
           WHEN rating like 'cautiondiscount' THEN 3
           WHEN rating like 'cautionextra' THEN 4
           WHEN rating like 'good' THEN 5
           END, rating");

           $stmt->execute(array("lname"  => empty($lname) ? '%' : '%'. $lname .'%',
           "address" => empty($address) ? '%' : '%'. $address .'%',
           "street"  => empty($street) ? '%' : '%'. $street .'%',
           "city"    => empty($city) ? '%' : '%'. $city .'%',
           "county"  => empty($county) ? '%' : '%'. $county .'%'));

    $userRow = $stmt->fetch(PDO::FETCH_ASSOC);

                if(!$userRow){                  
                     if($user->reportsearch($id,$lname,$address,$street,$city,$county)){
                          $user->redirect('./results.php?new='.$lname.$street);
                      }
                }else{
                    if($userRow['rating'] == 'badnopay'){
                        $user->redirect('./results.php?badnopay='.$lname.$street);
                    }
                    if($userRow['rating'] == 'cautionextra'){
                        $user->redirect('./results.php?cautionextra='.$lname.$street);
                    }
                    if($userRow['rating'] == 'cautiondiscount'){
                        $user->redirect('./results.php?cautiondiscount='.$lname.$street);
                    }
                    if($userRow['rating'] == 'cautionlate'){
                        $user->redirect('./results.php?cautionlate='.$lname.$street);
                    }
                    if($userRow['rating'] == 'good'){
                        $user->redirect('./results.php?good='.$lname.$street);
                    }
                    if($userRow['rating'] == 'badabusive'){
                        $user->redirect('./results.php?badabusive='.$lname.$street);
                    }
                }
            }
        catch(PDOException $e){
             echo $e->getMessage();
        }
    } 
}

我希望结果按此顺序显示,因此如果我有多个具有不同评级的结果,那么我希望它们按顺序显示。

它在提交时重新加载页面,而不是像往常一样显示结果页面。

最佳答案

您将不得不更改您的脚本。

  1. 查询,顺序后when不正确
  2. 你必须打印出你想要的 url,重定向是可能的,但它只会将你重定向到第一行(或第一个结果)
  3. 您的数据中有一个 badshort 评级,这将导致 null,因为您没有让“badshort”成为一个值的规则。

没有 post 的完整测试脚本将变为:

<?php
$lname = 'something';
$address = 'something1';
$street = 'something2';
$city = 'something3';
$county = 'something4';

try{
$stmt = $conn->prepare("SELECT *, case 
WHEN rating like 'badabusive' THEN 0 
WHEN rating like 'badnopay' THEN 1 
WHEN rating like 'cautionlate' THEN 2 
WHEN rating like 'cautiondiscount' THEN 3 
WHEN rating like 'cautionextra' THEN 4 
WHEN rating like 'good' THEN 5 
END as ratingval FROM clients 
WHERE  
lname  like :lname and
address  like :address and
street  like :street and
city  like :city and
county  like :county
order by ratingval");

$stmt->bindParam(':lname', $lname);
$stmt->bindParam(':address', $address);
$stmt->bindParam(':street', $street);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':county', $county);

$stmt->execute();

$userRow = $stmt->fetchAll();
if(!$userRow){
print "nothing found";
}
else
{
foreach ($userRow as $result) {
echo $result[lname] . " " . $result[ratingval]. "<br>";
}
}
}
catch(PDOException $e){
echo $e->getMessage();
}
?>

关于php - MySQL 相关排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33525330/

相关文章:

PHP preg_match 范围

php - 个人资料 url 无法获取结果

mysql查询用于从特定列中的 "1" "1-A"等中提取,"1-B"

mysql - 更改表失败,因为一行有不正确的数据 - 不正确的日期时间值 : '0000-00-00 00:00:00'

php - 以设定格式显示 TIMEDIFF

php - 从查询 yii2 获取数组而不是字符串

php - wordpress插件如何添加内容?

Entity Framework 迁移脚本中的 MySql 存储过程/循环

php - Mysql 查询在日期之间选择 php 不工作

php - 检查屏幕宽度,然后将页面上的所有 URL 重定向到移动设备,如果