簡體   English   中英

從mysql訂購搜索結果

[英]ordering search results from mysql

我有一個包含項目的表,我表中的2個屬性是name (項目名稱)和keywords (與該項目有關的單詞)。 當我在數據庫中搜索項目時,我使用以下代碼。 我將搜索條目q=""存儲在變量$query 我的mysql搜索如下..

    $q = "SELECT * FROM items WHERE name LIKE '%$query%' OR keywords LIKE '%$query%' AND status = '1'  LIMIT $start, $per_page";

此代碼獲取項目名稱與查詢類似的所有項目,或者包含與查詢類似的關鍵字。如何訂購結果,以便名稱與查詢類似的項目出現在項目之前包含一個像查詢一樣的關鍵字? 剛才它只是命令首先添加到數據庫中的項目。

你可以這樣試試

SELECT * 
  FROM items 
 WHERE (name LIKE '%$query%' 
    OR keywords LIKE '%$query%') 
   AND status = '1' 
 ORDER BY (name LIKE '%$query%') DESC, name, keywords
 LIMIT $start, $per_page

注意:考慮使用預准備語句而不是插入查詢字符串。

您可以使用CASE語句為OrderValue分配值,然后按OrderValue

SELECT *, 
  CASE WHEN name LIKE '%$query%' 
    THEN 1 
    ELSE 2 END AS OrderValue 
FROM items 
WHERE name LIKE '%$query%' 
  OR keywords LIKE '%$query%' 
  AND status = '1' 
ORDER BY OrderValue 
LIMIT $start, $per_page

嘗試這樣的事情:

$q = 
"SELECT * FROM items WHERE name LIKE '%$query%' AND status = '1'
 UNION
 SELECT * FROM items WHERE keywords LIKE '%$query%' AND status = '1'  
 LIMIT $start, $per_page"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM