谷歌搜索后,我找不到在 clause
中使用 like
时根据优先级对数据进行排序的答案
我使用以下查询来排序和查看数据:
SELECT i.name,i.add_time,round(i.price),s.store_address
FROM store_items i,stores s
WHERE i.store_id = s.store_id
AND (lower(i.name) LIKE '%samsung glaxy%'
OR lower(i.name) LIKE '%samsung%'
OR lower(i.name) LIKE '%glaxy%')
ORDER BY i.price ASC LIMIT 0,25
如何首先对 Samsung Galaxy 的结果行进行排序,首先将 like
运算符作为第一优先级,然后对 Samsung 和 的行进行排序银河系是第二优先?
请注意:
第一优先级表示应首先显示结果行,第二优先级表示应在之后显示其他结果行
我必须将它放入我的 PHP 函数中。
@10086'answer 我无法将其放入 PHP 代码
我的 PHP 代码是:
$sort = $_COOKIE['sort'];
$price_sort = $_COOKIE['price_sort'];
$currency_value = $_COOKIE['currency_value'];
if (!isset($_GET['number'])) {
$limit = 0;
}else{
$limit = filter_var($_GET['number'], FILTER_SANITIZE_NUMBER_INT);
}
$keyword_exp = explode(" ", $keyword); //separating keywords
$like = ""; //for use like clause for every keyword
$case = ""; // for priority selection case in query order
$case_inc = 2;
foreach ($keyword_exp as $value) {
$like .= "AND lower(i.name) like '%$value%'";
$case .= "WHEN lower(i.name) like '%$value%' THEN $case_inc";
$case_inc += 1;
}
//query performing to show result
$sql_query = "SELECT i.name 'title',i.add_time 'time',round(i.price) 'price',round(i.new_price) 'new_price',s.store_address 'address' FROM store_items i,stores s WHERE i.store_id = s.store_id $like ORDER BY CASE WHEN lower(i.name) LIKE '%$keyword%' THEN 1 $case END ASC LIMIT 0,25";
$query = mysql_query($sql_query) or die(mysql_error());
while ($row = mysql_fetch_array($query)) :
extract($row);
endwhile;
我的 PHP 代码中的 SQL 查询给出了以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'lower(i.name) like '%refurbished%' THEN 3 END ASC LIMIT 0,25' at line 1
最佳答案
使用CASE WHEN
:
SELECT i.name,i.add_time,round(i.price),s.store_address
FROM store_items i,stores s
WHERE i.store_id = s.store_id
AND (lower(i.name) LIKE '%samsung glaxy%' OR lower(i.name) LIKE '%samsung%' OR lower(i.name) LIKE '%glaxy%')
ORDER BY
CASE WHEN lower(i.name) LIKE '%samsung glaxy%' THEN 1
WHEN lower(i.name) LIKE '%samsung%' THEN 2
WHEN lower(i.name) LIKE '%glaxy%' THEN 3
ELSE 4 END,
i.price ASC
LIMIT 0,25
关于php - SQL-在子句中使用LIKE时根据第一优先级对数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433371/