我的 SQL 表結構如下所示
| ID | 可用尺寸 |
|---|---|
| 1 | 小號,大號,大號 |
| 2 | L,XL |
| 3 | 小大 |
| 4 | 30,32,33 |
在這里,我想過濾所有由 M 或 L 大小組成的 ID。我用 CONCAT 和 REGEXP 試過這個操作,我用 PHP 試過這個陳述句
$stmt = $conn->prepare('SELECT * FROM table WHERE CONCAT(",", available_sizes, ",") REGEXP ",(?|?),"');
$param1 = "M";
$param2 = "L";
$stmt->bind_param("ss", $param1, $param2);
$stmt->execute();
$result = $stmt->get_result();
Bt 它顯示一個錯誤:來自正則運算式查詢的“重復運算子運算元無效”。
uj5u.com熱心網友回復:
你可以匹配REGEXP反對\b(M|L)\b。在 PHP 中構建整個替換,然后將其系結到 MySQL 查詢中的占位符:
$stmt = $conn->prepare("SELECT * FROM table WHERE available_sizes REGEXP ?");
$params = array("M", "L");
$regex = "[[:<:]](" . implode("|", $params) . ")[[:>:]]";
$stmt->bind_param("s", $regex);
$stmt->execute();
$result = $stmt->get_result();
注意:在 MySQL 8 上,使用上述內容并進行以下細微更改:
$regex = "\\b(" . implode("|", $params) . ")\\b";
uj5u.com熱心網友回復:
您的問題是因為它沒有說明 REGEXP 部分的哪個表。
SELECT * FROM table WHERE yourcolumn REGEXP your expression;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466469.html
下一篇:如何檢查Laravel中的最新行
