2012-02-07 26 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