Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php MySQL选择优先级_Php_Mysql - Fatal编程技术网

php MySQL选择优先级

php MySQL选择优先级,php,mysql,Php,Mysql,这正是它应该做的。但我想做的是优先考虑“头衔”。但现在看来(每个搜索都是html的下拉列表),它只是简单的显示,没有优先权。所以标题可以放在最下面,作者可以放在最上面。顺序不对。我希望总有一个头衔在最上面 怎么做 $output=''; $lang=$\会话[“lang”]; $search=$\u POST[“查询”]; $query=“从语言为“$lang”且(标题为“%$search%”或作者为“%$search%”或年份为“%$search%”的帖子中选择*”; $result=mysq

这正是它应该做的。但我想做的是优先考虑“头衔”。但现在看来(每个搜索都是html的下拉列表),它只是简单的显示,没有优先权。所以标题可以放在最下面,作者可以放在最上面。顺序不对。我希望总有一个头衔在最上面

怎么做

$output='';
$lang=$\会话[“lang”];
$search=$\u POST[“查询”];
$query=“从语言为“$lang”且(标题为“%$search%”或作者为“%$search%”或年份为“%$search%”的帖子中选择*”;
$result=mysqli\u查询($connect,$query);
$output='
    '; 如果(mysqli_num_行($result)>0) { while($row=mysqli\u fetch\u数组($result)) { $output.=''; } } 其他的 { $output.='未找到'; } $output.='
'; echo$输出;
您可以拆分查询

$output = '';  
      $lang = $_SESSION["lang"];
      $search = $_POST["query"];
      $query = "SELECT * FROM posts WHERE language='$lang' AND (title LIKE '%$search%' OR author LIKE '%$search%' OR year LIKE '%$search%')";  
      $result = mysqli_query($connect, $query);  
      $output = '<ul class="list-unstyled">';  
      if(mysqli_num_rows($result) > 0)  
      {  
           while($row = mysqli_fetch_array($result))  
           { 

                $output .= '<a href="'.$url.'/'.$lang.'/'.$row["url"].'/"><li>'.$row["book"].'</li></a>';  
           }  
      }  
      else  
      {  
           $output .= 'Not found.';  
      }  
      $output .= '</ul>';  
      echo $output;  
$output='';
$lang=$\会话[“lang”];
$search=$\u POST[“查询”];
$query2=“从语言为“$lang”且标题为“%$search%”的帖子中选择*;
$result2=mysqli\u查询($connect,$query2);
$output='
    '; 如果(mysqli_num_行($result2)>0) { while($row=mysqli\u fetch\u数组($result2)) { $output.=''; } } 其他的 { $output.='未找到'; } $query=“从语言为“$lang”且作者为“%$search%”或年份为“%$search%”的帖子中选择*”; $result=mysqli\u查询($connect,$query); 如果(mysqli_num_行($result)>0) { while($row=mysqli\u fetch\u数组($result)) { $output.=''; } } 其他的 { $output.='未找到'; } $output.='
'; echo$输出;
订购人
应该能帮你做到以下几点:

我还添加了“author”和“book”的可选顺序(排序的优先级从“title”开始,然后是“author”,最后是“book”)——您可以按照
ASC
(升序)或
DESC
(降序)的顺序将其更改为您需要的任何顺序

<>我也建议您考虑使用BIN PARAMS,而不是直接将变量传递到SQL中以防止SQL注入。< /P> Mysqli绑定参数文档

非常好,请在此处发布帮助和有关SQL注入的更多信息


另外-尽可能避免使用
SELECT*FROM…
,只选择
您需要的信息。您也可以通过这种方式对其进行索引(这意味着从数据库中更快地检索数据)。

您可以使用评分系统为每个比赛打分,然后按比赛分数排序。因此,与标题匹配的得分较高,与作者匹配的得分次高,依此类推。我将在此处重写查询:

$query = "
SELECT book
     , title
     , url
  FROM posts 
 WHERE language='$lang' 
   AND ( 
         title LIKE '%$search%' 
         OR 
         author LIKE '%$search%' 
         OR 
         year LIKE '%$search%'
        )
  ORDER BY title ASC
       , author ASC
       , book ASC
"; 

在查询中使用ORDERBY子句。请向我展示!我把这个问题贴出来作为回答。我一开始误解了你的问题。修改了代码。您可以将查询分为两部分,然后连接输出。您可以检查查询中是否存在任何问题吗?我使用了与您提供的代码相同的代码。这不是“按名称排序”的解决方案,而不是优先级。因为它不是基于title@mezt我使用下面的评分系统提供了一个解决方案。看看这是否有效。
  $output = '';  
  $lang = $_SESSION["lang"];
  $search = $_POST["query"];



      $query2 = "SELECT * FROM posts WHERE language='$lang' AND title LIKE '%$search%'";
      $result2 = mysqli_query($connect, $query2);  
      $output = '<ul class="list-unstyled">';  
      if(mysqli_num_rows($result2) > 0)  
      {  
           while($row = mysqli_fetch_array($result2))  
           { 

                $output .= '<a href="'.$url.'/'.$lang.'/'.$row["url"].'/"><li>'.$row["book"].'</li></a>';  
           }  
      }  
      else  
      {  
           $output .= 'Not found.';  
      }  

      $query = "SELECT * FROM posts WHERE language='$lang' AND (author LIKE '%$search%' OR year LIKE '%$search%')";  
      $result = mysqli_query($connect, $query);  


      if(mysqli_num_rows($result) > 0)  
      {  
       while($row = mysqli_fetch_array($result))  
       { 

            $output .= '<a href="'.$url.'/'.$lang.'/'.$row["url"].'/"><li>'.$row["book"].'</li></a>';  
       }  
     }  
      else  
     {  
       $output .= 'Not found.';  
     }  


  $output .= '</ul>'; 
  echo $output;   
$query = "
SELECT book
     , title
     , url
  FROM posts 
 WHERE language='$lang' 
   AND ( 
         title LIKE '%$search%' 
         OR 
         author LIKE '%$search%' 
         OR 
         year LIKE '%$search%'
        )
  ORDER BY title ASC
       , author ASC
       , book ASC
"; 
SELECT *,
(
    CASE
        WHEN title LIKE '%$search%'  THEN 100
        WHEN author LIKE '%$search%' THEN 10
        WHEN year LIKE '%$search%'   THEN 1
    END
) AS matchScore
FROM posts
WHERE
language='$lang' AND
(title LIKE '%$search%' OR author LIKE '%$search%' OR year LIKE '%$search%')
ORDER BY matchScore DESC