gpt4 book ai didi

php - 如何将用户可自定义的高级搜索转换为 SQL 查询?

转载 作者:可可西里 更新时间:2023-11-01 08:37:03 26 4
gpt4 key购买 nike

我意识到这很抽象,但我想做一些与 Remember The Milk 的智能列表不同的事情: http://www.rememberthemilk.com/help/answers/search/advanced.rtm

我有一组被标记、分类等的用户故事,我发现拥有用户可定制的“ View ”或“智能列表”以返回一组特定的故事将具有巨大的优势故事。这使得使用该应用程序的工作流程非常灵活,并且对于许多不可预见的情况很有用。

我现在对简单的 OR 查询没有问题:

WHERE tag = "tag1" OR tag = "tag2" OR category = "category1" OR category = "category2"

但这确实不如混合 AND/OR 条件有用:

WHERE (tag = "tag1" OR tag = "tag2") AND category = "category1"

因此,明显的问题是:

  1. 嵌套条件
  2. 在同一查询中混合使用 AND/OR 条件
  3. 使这种“查询抽象”语法或多或少具有人类可读性、易于存储/解析、URL 查询字符串友好等。

更糟糕的是,简单的 OR 条件可以在 where 子句中得到很好的处理,但是 AND(复合条件)似乎需要每个条件进行额外的连接,我不知道如何在可持续代码中组织它。

我正在使用 PHP/MySQL,但这似乎不是特定于平台的。

总而言之,我想找到一种可持续的方法来解析人为生成的条件序列并将其转换为 SQL。

最佳答案

一个抽象的问题应该得到一个抽象的答案。 :-) 唉,我要给你举个例子说明另一个软件是如何处理这个问题的,因为我不是很哲学。

Request Tracker是一个历史悠久的浏览器 UI 故障单系统。它有一个非常强大的工单搜索机制,知道如何读取与工单相关的每个可能的字段,并让您通过 Web 界面有效地构建整个 SQL 查询。

我找不到搜索页面的任何屏幕截图,所以也许你可能想看看 online demo RT。登录,然后从窗口左上角的菜单中选择“工单”,然后选择“新搜索”。

或者更好的是,要查看所有搜索是如何在此搜索工具上构建的,请单击主演示屏幕(在您登录后立即显示)右侧列表中的队列。当您显示一组门票时,单击窗口顶部的“门票”。 (不是出现的菜单选项。只需单击票证。)

此处的查询构建器在右侧显示查询的结构,并允许您使用左侧的控件混合搭配要包含在其中的内容。如果您是“高级”用户并且想要手动编写自己的查询,或者清理 Web UI 存在的问题,您可以单击顶部的 Advanced 链接并编辑看起来非常像 SQL 的内容。

我不会讨论如何加入其他表。我回答这个问题就好像这是一个 UI/UX 问题,而不是数据建模问题。 :-)

关于php - 如何将用户可自定义的高级搜索转换为 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9171299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com