首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 與 MySQL 實現多關鍵字、多欄位搜尋的 SQL 生成函式

     編輯:PHP 相關知識

PHP 與 MySQL 實現多關鍵字、多欄位搜尋的 SQL 生成函式

在開發搜尋功能時,常需要支援多關鍵字且跨多個欄位進行模糊查詢。本文分享一個實用的 PHP 函式,能根據傳入的關鍵字字串、資料表名稱與欄位組合,自動產生對應的 SQL 查詢語句。

功能示例

假設關鍵字為 "1 2 3",資料表為 enter_gongyin_pic,搜尋欄位為 a+b+c(以 + 分隔多欄位)。呼叫函式:

$sql = search($keyword, "enter_gongyin_pic", "a+b+c");

將產生如下 SQL:

SELECT * FROM `enter_gongyin_pic` 
WHERE `a` LIKE '%1%' OR `a` LIKE '%2%' OR `a` LIKE '%3%' 
   OR `b` LIKE '%1%' OR `b` LIKE '%2%' OR `b` LIKE '%3%' 
   OR `c` LIKE '%1%' OR `c` LIKE '%2%' OR `c` LIKE '%3%'

關鍵字以空格分隔,支援單一或多欄位搜尋,靈活度極高。

核心函式實作

function search($keyword, $table, $field) {
    // 解析欄位組合(以 + 分隔)
    $fields = explode("+", $field);
    $fieldCount = count($fields);

    // 解析關鍵字(以空格分隔,並過濾空值)
    $keywords = array_filter(explode(" ", $keyword));
    $keywordCount = count($keywords);

    // 構建 SQL 基礎結構
    $sql = "SELECT * FROM `$table` WHERE ";
    $conditions = [];

    if ($fieldCount == 1) {
        // 單一欄位,多關鍵字 OR 邏輯
        foreach ($keywords as $kw) {
            $conditions[] = "`{$fields[0]}` LIKE '%$kw%'";
        }
    } else {
        // 多欄位:每個欄位對每個關鍵字產生條件
        foreach ($fields as $f) {
            foreach ($keywords as $kw) {
                $conditions[] = "`$f` LIKE '%$kw%'";
            }
        }
    }

    $sql .= implode(" OR ", $conditions);
    return $sql;
}

使用說明

  • keyword:關鍵字字串,空格分隔,如 "北京 上海 廣州"
  • table:資料表名稱
  • field:欄位組合,單欄位直接寫欄位名;多欄位用 + 連接,如 title+content+author

延伸應用

此函式可整合至 MVC 架構的 Model 層,搭配分頁、排序參數,快速構建後台管理系統的通用搜尋模組。實際專案中建議加入 SQL 注入防護(如使用 PDO 預處理),並依資料量評估是否需全文索引優化。

希望這個函式能為你的 PHP 專案帶來便利!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved