php - 需要有关 mysql 查询的帮助,以根据请求使用不同的可能组合搜索所有列

标签 php mysql search

我目前正在开发一个 php 项目,其中我坚持使用 mysql 查询来搜索搜索结果中请求的所有可能变化。

这是我的数据库列示例:

column 1: title
column 2: description
column 3: category
column 4: subcategory
column 5: city
column 6: state
column 7: type

我想要这样的结果: 搜索标题或描述 + 状态 + 类别 + 类型中的关键字匹配

标题或描述 + 状态 + 子类别 + 类型中的搜索关键字匹配

标题或说明+城市+类别+类型中的搜索关键字匹配

标题或说明 + 城市 + 子类别 + 类型中的搜索关键字匹配

在标题或说明 + 类型中搜索关键字匹配

在标题或说明 + 状态中搜索关键字匹配

在标题或说明 + 城市中搜索关键字匹配

搜索标题或描述中的关键字匹配

状态

城市

类型

类别

或者我们从搜索查询中获得的任何可能的内容。

搜索包含以下选项:

关键词搜索(可选)+州选择(可选)+城市选择(可选)+类别选择(可选)+子类别选择(可选)+类型选择(可选)

这样我们就可以搜索任何关键字或状态,而无需关键字或任何我们需要的东西。

最佳答案

根据用户的选择添加 AND 条件,在 PHP 中构建查询。 PDO 示例(无需框架):

$pdo = new PDO($dsn, $user, $pass, $opt);

// get this data from user inputs
$search_keyword = 'bla';
$conditions = [ 
    "category" => 'cat',
    "subcategory" => 'sale',
    "city" => 'auburn',
    "state" => 'NY',
    "type" => 'offer',
];


$sql = "SELECT * from data_table WHERE (title = :search OR description = :search)";

$binds = ['search' => $search_keyword];
foreach($conditions as $col => $val){
    $conditions[] = $col . ' = :' . $col;
    $binds[$col] = $val;
}

if ($conditions) {
    $sql .= " AND " . implode(" AND ", $conditions);
}

$stmt = $pdo->prepare($sql);
$stmt->execute($binds);
$data = $stmt->fetchAll();

关于php - 需要有关 mysql 查询的帮助,以根据请求使用不同的可能组合搜索所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38260806/

相关文章:

php - 如何停止在子类中调用基类的构造函数

php - MySQL:使用相同连接对象的多个查询

ruby-on-rails - ElasticSearch + Tire如何强制条件返回与字段相同的值

MySQL - 通过部分单词匹配和相关性评分进行高效搜索(全文)

PHP 强制下载 .xlsx 文件损坏

php - Symfony token getCredentials 返回 null

Mysql单列表-->插入其他表

php - 顺序 strpos() 比具有一个 preg_match 的函数更快?

php - 检查用户名是否被占用

mysql - Azure 虚拟机 - 无法访问 MySQL 数据库