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