Как бы я перевел настраиваемый пользователем расширенный поиск в запросы SQL? - PullRequest
3 голосов
/ 07 февраля 2012

Я понимаю, что это довольно абстрактно, но я бы хотел сделать что-то похожее на умные списки Remember The Milk: http://www.rememberthemilk.com/help/answers/search/advanced.rtm

У меня есть набор пользовательских историй, которые помечены, классифицированы и т. Д., И я вижу, что было бы огромным преимуществом иметь настраиваемые пользователем "представления" или "умные списки" для возврата определенного набора рассказы. Это делает рабочий процесс использования приложения достаточно гибким и полезным для многих непредвиденных сценариев.

У меня сейчас нет проблем с простыми запросами OR:

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

Но это действительно не так полезно, как смешанные И / ИЛИ условия:

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

Итак, очевидные проблемы:

  1. Вложенные условия
  2. Смешивание условий И / ИЛИ в одном запросе
  3. Обеспечение того, чтобы этот синтаксис «абстракции запроса» был более или менее понятным для человека, легко сохраняемым / анализируемым, подходящим для строки запроса URL и т. Д.

Что еще хуже, простые условия OR могут быть достаточно хорошо обработаны в предложении where, но AND (составные условия), по-видимому, требуют дополнительного объединения для каждого условия, и я потерял, как организовать это в устойчивом коде.

Я использую PHP / MySQL, но это не похоже на платформу.

Подводя итог, я хотел бы найти устойчивый подход к анализу и преобразованию созданной человеком последовательности условий в SQL.

1 Ответ

2 голосов
/ 07 февраля 2012

Абстрактный вопрос заслуживает абстрактного ответа.:-) Увы, я собираюсь привести вам пример того, как другая часть программного обеспечения решает эту проблему, потому что я не очень философский.

Request Tracker - это длинныйустановленная система оповещения о неисправностях в браузере.Он обладает чрезвычайно мощным механизмом поиска заявок, который знает, как читать все возможные поля, связанные с заявкой, и позволяет эффективно создавать весь запрос SQL через веб-интерфейс.

Я не смог найти скриншотыПоисковая страница, так что, возможно, вам захочется взглянуть на онлайн-демо RT.Войдите в систему, затем в меню в верхнем левом углу окна выберите «Билет», затем «Новый поиск».

Или еще лучше, чтобы увидеть, как ВСЕ поиски строятся на этом инструменте поиска, нажмите наочередь из списка в правой части основного демонстрационного экрана (которая отображается сразу после входа в систему).Когда у вас появится набор билетов, нажмите «Билеты» в верхней части окна.(Не пункт меню, который появляется. Просто нажмите Билеты.)

Строитель запросов здесь показывает структуру вашего запроса справа и позволяет вам смешивать и сопоставлять элементы, которые нужно включить в него, используя элементы управления налевый.И если вы «продвинутый» пользователь и хотите написать свой собственный запрос вручную или очистить что-то, с чем у веб-интерфейса возникают проблемы, вы можете нажать на ссылку «Дополнительно» вверху и отредактировать что-то, что замечательно похоже на SQL.

Я не буду вдаваться в то, как присоединиться к другим таблицам. Я отвечаю на это, как будто это вопрос UI / UX, а не вопрос моделирования данных.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...