【问题标题】:Regular Expression mysql with AND operator带有 AND 运算符的正则表达式 mysql
【发布时间】:2019-02-19 09:19:18
【问题描述】:

我已经创建了一个搜索字段,如果我搜索“菠菜,西瓜”,它将以“,”分解输入,并运行 MySQL 搜索数据库。这意味着 SQL 将作为

运行
SELECT * FROM table WHERE 
(vegetable LIKE '%Spinach%' OR fruits LIKE '%Spinach%') AND (vegetable LIKE '%Watermelon%' OR fruits LIKE '%Watermelon%')

我的数据库表数据如下所示:

id  Vegetable  fruits
----------------------
1   Spinach    Apple
2   Cucumber   Orange
3   Spinach    Watermelon

每个id的结果只能出来一次。

<php>
$keywords = trim($_REQUEST['keyword']);
$keywords = preg_replace("/,\s*/", "|", $keyword);
$where = "[[:<:]](" . $keywords . ")[[:>:]]";

$sql = "SELECT * FROM table ";
$sql .= "WHERE vegetable REGEXP '" . $where . "' OR fruits REGEXP '" . $where . "'";
$result = mysqli_query($conn, $sql);
while ($rs = mysqli_fetch_array($result)) 
{
    $vege = $rs["vegetable"];
    $fruits = $rs["fruits"];
}

</php>


<html>
<form method=post>
    <input type="text" class="form-control" placeholder="SEARCH..." value="<?=$keywords?>">
</form>
</html>

【问题讨论】:

  • 您想了解的具体问题是什么?就目前而言,这是对您正在做什么和/或打算做什么的解释,但没有明确的问题陈述。
  • 我想用正则表达式生成一个mysql查询,如下所示,SELECT * FROM table WHERE (vegetable LIKE '%Spinach%' OR fruits LIKE '%Spinach%') AND (vegetable LIKE '%Watermelon %' OR 水果 LIKE '%Watermelon%')
  • 您是否假设提问者没有指定“菠菜”是水果还是蔬菜?你的餐桌上只能有一种水果和一种蔬菜?这两个要求似乎都很奇怪。

标签: php html mysql regex


【解决方案1】:

这是使用 REGEXP 的字面 MySQL 查询:

SELECT *
FROM table
WHERE
    (vegetable REGEXP '[[:<:]]Spinach[[:>:]]' OR fruits REGEXP '[[:<:]]Spinach[[:>:]]') AND
    (vegetable REGEXP '[[:<:]]Watermelon[[:>:]]' OR fruits REGEXP '[[:<:]]Watermelon[[:>:]]');

【讨论】:

  • 我还应该使用 preg_replace 吗? $keywords = preg_replace("/,\s*/", "|", $keyword);
  • 我不知道,因为这个问题并不表明需要。将一列与许多 OR 可能性进行比较需要我以前的答案。
  • 因为我想让条件基于用户输入的内容,例如如果用户输入菠菜、西瓜、大米,那么在 WHERE mysql 后面会再添加一个条件 ---> AND ((vegetable REGEXP '[[:<:>:]]' OR fruits REGEXP '[[:<:>:]]')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2010-10-02
  • 2018-06-19
相关资源
最近更新 更多