php - 如何构建适合所有用户的动态 mysql 查询

标签 php mysql dynamic

我的网站搜索功能需要您的帮助。我正在开发一个成员(member)区,用户可以在其中根据特定标准或标准组合搜索其他注册用户。

我现在的问题是如何构建动态 mysql 查询以满足每个搜索条件组合的需要,其中条件的数量是可变的。

通常,我可以使用预先确定的一组标准来编写

   WHERE param1 = '$param1'
   AND param2 = '$param2'
   AND param3 = '$param3'

我该如何解决这个问题?

最佳答案

如果问题是您不知道用户会选择哪个标准,但想返回“空白”标准的结果,您可以使用以下方法:

$criteria_1 = $_POST['criteria_1'];
$criteria_2 = $_POST['criteria_2'];
$criteria_3 = $_POST['criteria_3'];

if(!$criteria_1 && !$criteria_2 && !$criteria_1) {

     echo "You must select at least one criteria!";

} else {

   // Run query mentioned below and return results.       

} 

查询将如下所示:

SELECT * from mytable
WHERE
(criteria1 = '$criteria_1' OR '$criteria_1' = '') AND
(criteria2 = '$criteria_2' OR '$criteria_2' = '') AND
(criteria3 = '$criteria_3' OR '$criteria_3' = '')

这会将任何空白(未选择的)参数视为空白并忽略它们。请注意,如果没有给出条件,它将返回所有结果。

上面的另一种写法是:

SELECT * from mytable
WHERE
criteria1 IN ('$criteria_1', '') AND
criteria2 IN ('$criteria_2', '') AND
criteria3 IN ('$criteria_3', '')

同样,允许完全不输入以返回所有 criteria1 结果。

关于php - 如何构建适合所有用户的动态 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10390873/

相关文章:

mysql - 如果行存在但没有主键,则 SQL 语句自动递增列中的值

python - Django 动态模型字段

php - 我应该如何设计我的应用程序以便轻松提供多种语言?

php - 在字符串中访问一个对象两次

mysql - mysql 中的记录具有重复的 id(状况良好)?任何查询得到

C++ 沙盒动态库

linq - 如何使用带 IEnumerable(Of T) 的 System.LINQ.Dynamic 程序集

php - TYPO3 无法写入 MySQL 数据库

javascript - 如何从jquery日期和时间选择器中选择和显示数据

php - 从 Zend 和 PHP 配置对 MySQL 的数据库访问时遇到问题