在 MySQL 中,模糊查詢主要透過 LIKE 運算子搭配通配符來實現。常見的通配符有兩個:% 代表任意長度的字串(含零個字元),_ 則代表單一字元。基本語法如下:
SELECT * FROM table_name WHERE column_name LIKE 'pattern';
-- 查詢 name 欄位包含「不」的記錄
SELECT * FROM mytable WHERE mysqlname LIKE '%不%';
MySQL 預設不區分大小寫,若需區分英文字母大小寫,可使用 BINARY 關鍵字:
SELECT * FROM mytable WHERE mysqlname LIKE BINARY '%A%';
SELECT * FROM mytable
WHERE mysqlname LIKE '%不%'
AND mysqlname LIKE BINARY '%A%';
在 PHP 雙引號字串中,變數會自動解析。使用 {} 包裹變數可明確界定變數名稱,避免歧義:
$sql = "SELECT * FROM oneself
WHERE name LIKE '%{$colname_Recordset1}%'
LIMIT {$startRow_Recordset1}, {$maxRows_Recordset1}";
$Recordset1 = mysql_query($sql) or die(mysql_error());
最佳實務建議: 實際專案中強烈建議改用 PDO 或 MySQLi 的預處理語句,防止 SQL 注入並提升效能。
若需對數值型欄位(如 id)進行模糊查詢,同樣適用 LIKE,但需注意型別轉換:
SELECT id, name FROM depart WHERE id LIKE '%123%';
此查詢會將 id 隱性轉為字串比對,大量資料時效能較差,建議改用範圍查詢(BETWEEN 或 >=/<=)。