выяснить, в каком поле искать значение с помощью SQL и Perl - PullRequest
1 голос
/ 08 марта 2010

Я не слишком хорошо разбираюсь в SQL и знаю, что, вероятно, есть гораздо более эффективный способ выполнить то, что я здесь делаю, поэтому любая помощь будет высоко ценится. Заранее спасибо за ваш вклад!

Я пишу короткую программу для местной средней школы. В этой школе юниоры и пенсионеры, имеющие водительские права и автомобили, могут поехать в школу, а не ездить на автобусе. Каждому драйверу назначается ровно один пробел, и их DLN используется в качестве первичного ключа таблицы драйверов. Марки, модели и цвета автомобилей хранятся в отдельной таблице автомобилей, связанной с таблицей водителей в поле Номерной знак.

Моя идея состоит в том, чтобы в главном графическом интерфейсе программы было одно окно поиска, в котором школьный секретарь мог бы ввести, кого / что она ищет, и вывести список результатов. Дело в том, что она может набирать номерной знак, цвет машины, марку и модель, имя водителя, DLN ученика или пробел. Как программист, я не знаю, что именно она ищет, поэтому мне на ум приходит несколько вариантов сборки, чтобы быть уверенным, что я проверяю везде соответствие:

1) преформ пару

  SELECT * FROM [tablename] 

SQL-операторы, по одному на таблицу, и объединение результатов в массивы в моей программе, затем поиск по массивам по одному элементу за раз с помощью регулярных выражений, поиск подходящего шаблона, похожего на поисковый запрос, и, если я его найду, добавьте вся запись, в которой есть соответствие массиву результатов для отображения на экране в конце поиска.

2) возьмите в программу все, что она ищет, в качестве инструмента для масштабирования и подготовьте несколько операторов выбора, например

  SELECT * FROM DRIVERS WHERE DLN = $Search_Variable
  SELECT * FROM DRIVERS WHERE First_Name = $Search_Variable
  SELECT * FROM CARS WHERE LICENSE = $Search_Variable

и т. Д. Для каждого атрибута каждой таблицы, вставка результатов в массив результатов, отображаемый на экране после завершения поиска.

Есть ли более понятный способ выполнить этот поиск, не заставляя ее указывать именно то, что она ищет? Возможно, какой-то SQL-оператор, которого я никогда раньше не видел?

Ответы [ 2 ]

1 голос
/ 08 марта 2010

Прежде всего, вы должны не использовать SELECT *, и вам определенно следует использовать значения связывания .

Во-вторых, самый простой способ выяснить, что ищет пользователь, это спросить пользователя. Иметь набор флажков нравится так:

Search among: [ ] Names 
              [ ] License Plate Numbers 
              [ ] Driver's License Numbers

В качестве альтернативы вы можете заметить, что имена не содержат цифр, и я не видел ни одного номера водительского удостоверения, содержащего цифры. Существуют и другие эвристические методы, которые можно применять для частичного определения того, что пользователь пытался найти.

Если вы хорошо представляете результаты, это может сработать.

Наконец, попытайтесь выяснить, какие возможности поиска предлагает база данных, которую вы используете, и использовать их так, чтобы большая часть поиска происходила до того, как пользовательский интерфейс коснулся данных.

1 голос
/ 08 марта 2010

Выглядит как правильное приложение для полнотекстовой поисковой системы Sphinx . В CPAN есть модуль Sphinx :: Search , который можно использовать как клиент Perl для Sphinx.

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