Нужен Шаблон для динамического поиска нескольких sql таблиц

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
7
задан henser 19 February 2013 в 00:10
поделиться

3 ответа

Поиск и нормализация могут противоречить друг другу. Таким образом, вероятно, первая вещь состояла бы в том, чтобы получить некоторое "представление", которое показывает все поля, которые могут искаться как одна строка с единственным ключом, получая Вас резюме. затем можно бросить что-то как Lucene перед этим, чтобы дать Вам полнотекстовый индекс тех строк, способ, которым работы, Вы просите у этого "x" в этом представлении, и он возвращает Вам ключ. Это - отличное решение, и приезжайте рекомендуемые joel самостоятельно на подкасте в течение первых 2 месяцев IIRC.

1
ответ дан 7 December 2019 в 07:53
поделиться

Насколько я понимаю (и я - также кто-то, кто записал против ужасной унаследованной базы данных), нет такой вещи как динамические операторы Where. Это НЕ было решено.

Лично, я предпочитаю генерировать свои динамические поиски в коде. Делает тестирование удобным. Отметьте при создании запросов SQL в коде не конкатенируйте во вводе данных пользователем. Используйте свой @variables!

Единственная альтернатива должна использовать оператор COALESCE. Скажем, у Вас есть следующая таблица:

Users
-----------
Name nvarchar(20)
Nickname nvarchar(10)

и Вы хотите искать дополнительно имя или псевдоним. Следующий запрос сделает это:

SELECT Name, Nickname
FROM Users
WHERE
    Name = COALESCE(@name, Name) AND
    Nickname =  COALESCE(@nick, Nickname)

Если Вы не хотите искать что-то, просто передайте в пустом указателе. Например, передача в "brian" для @name и пустом указателе для @nick приводит к следующему оцениваемому запросу:

SELECT Name, Nickname
FROM Users
WHERE
    Name = 'brian' AND
    Nickname =  Nickname

Объединить оператор превращает пустой указатель в оценку идентификационных данных, которая всегда верна и не влияет где пункт.

5
ответ дан 7 December 2019 в 07:53
поделиться

Вам понадобится что-то вроде SphinxSearch (для MySQL) или Apache Lucene .

Как вы сказали в своем примере, давайте представим себе резюме который будет состоять из нескольких полей:

  • Элемент списка
  • Имя,
  • Адрес,
  • Образование (это может быть отдельная таблица) или
  • Опыт работы (это может быть увеличено до отдельной таблицы) где каждая строка представляет предыдущее задание)

Таким образом, поиск слова во всех этих полях с WHERE быстро превращается в очень длинный запрос с несколькими СОЕДИНЕНИЯМИ.

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

Именно здесь работают такие инструменты, как Sphinx Search. Они создают ПОЛНЫЙ ТЕКСТОВЫЙ индекс вашего «документа»

1
ответ дан 7 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: