PHP MySQL : Proper/easier way to implement dynamic filtering

标签 php mysql

我需要有关方法、算法或工具的建议来满足我的需求; SQL 中的动态过滤

我使用 PHP 作为后端。我在前端创建结果过滤,如下所示:

enter image description here

单击“确定”后,我使用以下方式发送 JSON 数据:

JSON.stringify($('#modalFilter input, #modalFilter select').serializeArray())

这是数据:

"[
    {"name":"parameter","value":"state"},
    {"name":"operator","value":"contains"},
    {"name":"value","value":"mel"},
    {"name":"parameter","value":"dateappoint"},
    {"name":"operator","value":"begin"},
    {"name":"value","value":"13/12/2017"}
]"

我的问题就在这里。在后端(PHP),经过一些处理(绑定(bind)参数、执行查询等),我得到了一个非常巨大且丑陋的 SQL:

SELECT ...
FROM sample_staff
WHERE

    CASE WHEN 'state_contains' = ? THEN state LIKE CONCAT('%',?,'%') END
    CASE WHEN 'state_notcontains' = ? THEN state NOT LIKE CONCAT('%',?,'%') END
    CASE WHEN 'state_is' = ? THEN state = ? END
    CASE WHEN 'state_isnt' = ? THEN state <> ? END
    CASE WHEN 'state_begin' = ? THEN state LIKE CONCAT(?,'%') END
    CASE WHEN 'state_end' = ? THEN state LIKE CONCAT('%',?) END

    CASE WHEN 'dateappoint_contains' = ? THEN dateappoint LIKE CONCAT('%',?,'%') END
    CASE WHEN 'dateappoint_notcontains' = ? THEN dateappoint NOT LIKE CONCAT('%',?,'%') END
    CASE WHEN 'dateappoint_is' = ? THEN dateappoint = ? END
    CASE WHEN 'dateappoint_isnt' = ? THEN dateappoint <> ? END
    CASE WHEN 'dateappoint_begin' = ? THEN dateappoint >= STR_TO_DATE(?, '%d/%m/%y') END
    CASE WHEN 'dateappoint_end' = ? THEN dateappoint <= STR_TO_DATE(?, '%d/%m/%y') END

上面的示例 SQL 仅满足 2 个条件(状态和数据指定),但在实际情况中,我必须满足更多条件。我希望避免存储过程只是为了循环条件。

我听说过学说,但仍然不确定该工具是否可以满足我的需求,或者它的目的完全不同。

最佳答案

为什么不使用 jQuery QueryBuilder 。它可以满足您的需求并拥有广泛的后端包来支持。

关于PHP MySQL : Proper/easier way to implement dynamic filtering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785397/

相关文章:

mysql - mysql 和 php 中的 session

javascript - 延时网络界面

php - SELECT 循环内的 SELECT 循环

mysql - 如何通过为自动递增列传递值 ''来将数据插入MySQL?

php - 使用面向对象的 php 进行服务器端验证;数据未插入数据库

php - PHP session 声明错误

javascript - 我可以在输入文件中一张一张地插入图像吗?

批量删除垃圾邮件 Wordpress 用户的 MySQL 查询

在 cleardb 中执行和插入时出现 PHP PDO 错误

mysql - select2 多个值存储在数据库中