簡體   English   中英

MySQL返回行,其中列包含由數組定義的類別(並增加結果的權重)

[英]MySQL return rows where column contains categories defined by array (and add weight to the results)

在我的應用中,用戶可以輸入無限數量的類別進行搜索。 用戶點擊“提交”后,我將使用AJAX調用PHP腳本來查詢數據庫,並返回與用戶為類別定義的結果匹配的結果。

我的類別列按行分別分隔:“藍色,紅色,黃色,綠色”等。

我有兩個問題:

  1. 如何將數組傳遞給MySQL(例如:[blue,yellow,green]),然后在Categories列中搜索每個術語? 如果找到至少一個類別,則應返回該行。
  2. MySQL是否可以在具有更多用戶鍵入類別的行中增加權重,從而使其進一步位於返回結果的頂部? 如果MySQL無法做到這一點,那么用PHP做到這一點的最佳方法是什么?

感謝您抽出寶貴的時間查看我的問題。

對於第1部分,您可以使用以下功能:

<?php
function createquery($dataarray){
    $query="select * from table where ";
    $loop=1;
    foreach($dataarray as $data)
    {
      $query.="col='$data'";
      if(count($dataarray)<$loop-1){
        $query.=' or ';
      }
      $loop++;
    }
    return $query;
}

?>

這將返回長查詢。

這樣使用:

mysql_query("select * from table where category in (".implode($yourarray,',').")");

1)

數組不傳遞給MySQL數據庫。 過去的查詢是一個字符串,它告訴數據庫您要執行的操作。 一個示例是: SELECT * FROM myTable WHERE id = 1

由於您嘗試使用數組中的值在數據庫中進行搜索,因此您可以執行一個foreach循環以使用PHP中的所有這些列創建一個有效的SQL 命令 ,然后將該命令/查詢發送到數據庫。 例如:

$array = array('blue', 'red', 'yellow', 'green');

$sql = "SELECT ";
foreach ($array as $value)
{
  $sql .= $value.", ";
}
$sql .= " FROM myTable WHERE id = 1";

重要! 強烈建議使用准備好的語句並綁定參數,以免被sql注入所破壞!

2)

您可以按照自己喜歡的方式訂購獲得的結果。 排序結果的示例如下:

SELECT * FROM myTable WHERE SALARY > 2000 ORDER BY column1, column2 DESC

暫無
暫無

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

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