2012-02-07 117 views
3

我意识到这是相当抽象,但我想这样做没有什么不同记住牛奶的智能列出了一句: http://www.rememberthemilk.com/help/answers/search/advanced.rtm如何将用户可自定义的高级搜索转换为SQL查询?

我有一组的标签,分类等用户的故事,和我看到用户可定制的“视图”或“智能列表”返回一组特定的故事将是非常有利的。这使得使用该应用程序的工作流程对于许多不可预见的情况来说非常灵活和有用。

我现在都没有问题简单或查询:

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

但是这真的不是混合和/或条件有用:

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

因此,表观问题是:

  1. Nes泰德条件
  2. 混合和/或条件在同一个查询
  3. 使这种“抽象查询”语法更多或更少的人可读,易于存储/解析,URL查询字符串友好等

更糟糕的是,简单的OR条件可以在where子句中得到很好的处理,但AND(复合条件)似乎需要每个条件的额外连接,并且我失去了如何在可持续代码中组织这些条件。

我正在使用PHP/MySQL,但这似乎并没有如此特定的平台。总之,我想找到一种可持续的方法来解析和转换人为生成的条件序列为SQL。

+1

你在找什么样的答案?现有技术的例子?伪代码(它的桶)?关于编程问题的建议你正在实施一些解决方案?或者只是一致认为这个问题很简单? (作为参考,这个问题很简单。) – Graham 2012-02-07 05:50:54

+0

如何将语法字符串解析为顺序数据库操作,是否处理过滤客户端/服务器端,是否为每个保存的搜索创建自定义数据库视图。只是希望人们在这一点上抛出想法。 – landons 2012-02-07 05:53:24

回答

2

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

Request Tracker是一个历史悠久的浏览器-UI故障票务系统。它具有非常强大的票证搜索机制,可以知道如何阅读与票证相关的每个可能字段,并且可以通过Web界面有效地制作整个SQL查询。

我找不到搜索页面的任何屏幕截图,因此您可能需要查看RT的online demo。登录后,从窗口左上角的菜单中选择“Ticket”,然后选择“New Search”。

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

这里的查询生成器在右边显示了你的查询结构,并且可以使用左边的控件混合并匹配要包含的东西。如果你是一个“高级”用户,并且想手动编写你自己的查询,或者清理一些Web UI出现问题的东西,你可以点击顶部的高级链接,编辑看起来非常像SQL的东西。

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

+0

Ghoti ...“鱼”是吗?呵呵。 UI/UX方面非常重要,非常感谢你提供了一个先例。我想做的最后一件事是重新发明轮子。你是对的 - 问题不在于数据建模本身,而在于服务器端或客户端应用过滤器是否完全在我的问题范围内。 – landons 2012-02-07 05:39:22