Объединить несколько дочерних записей в поиске родительской базы данных - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующие таблицы:

Client и Companies.A Client может иметь несколько Companies.В настоящее время я отображаю список Clients в jQuery dataTable , используя обработку на стороне сервера.Все работает нормально, но люди, использующие его, спрашивали меня, могут ли они также искать, используя названия некоторых компаний в качестве критериев поиска.

Теперь, при нормальных обстоятельствах, dataTable делает это самостоятельно, просматривая поля.Но dataTable серьезно замедляется после нескольких сотен записей, поэтому я вынужден использовать обработку на стороне сервера, и мне приходится выполнять поиск и обрабатывать конечные результаты, так как dataTable отвечает только за отображение текущего лота.

В настоящее время я выполняю сравнение LIKE по нескольким полям таблицы Clients для поиска.

Я подумал, что я могу добавить объединенный список всех Companies, принадлежащихкаждый Client и добавить пользовательское поле для сравнения LIKE, и даже может отображать его в виде небольшого списка после имени клиента.

Что я мог сделать в этом случае, так это идеявозможно или есть какой-то лучший способ сделать это?

Я подумал, может быть, какой-то подзапрос, но он должен вернуть только один результат.

ОБНОВЛЕНИЕ: Структура базы данных

Клиенты

  • client_id |INT (11) |НЕ НУЛЬ |AUTO_INCREMENT
  • first_name |VARCHAR (200) |NOT NULL
  • last_name |VARCHAR (200)
  • электронная почта |VARCHAR (200) |NOT NULL
  • пароль |ТЕКСТ
  • телефон |VARCHAR (50)
  • дата рождения |ДАТА
  • registration_date |DATETIME
  • client_type |INT (11) - Ссылки ClientTypes таблица
  • status_id |INT (11) |NOT NULL - ссылки ClientStatus таблица

компании

  • company_id |INT (11) |НЕ НУЛЬ |AUTO_INCREMENT
  • название компании |VARCHAR (200) |NOT NULL
  • company_name_slug |VARCHAR (200) |NOT NULL
  • creation_on |DATETIME |NOT NULL
  • updated_on |DATETIME
  • client_id |INT (11) |NOT NULL - Ссылки Clients таблица

Я не могу скопировать точные операторы CREATE, потому что у реальных таблиц есть еще несколько полей и связей с другими таблицами.Я добавил возобновленную версию, но идея есть.Я ожидаю, что смогу сделать что-то вроде:

Конечный результат в ячейке DataTable

Клиент Alpha

  • Company Foo
  • Фирменный бар
  • Фирменный Омега

Клиент Бета

  • Фирменный Омега

Клиент Гамма

  • Company Foo

И если я ищу " omega ", я хочу, чтобы результат содержал клиентов Alpha и Beta.

1 Ответ

0 голосов
/ 05 марта 2019

Используйте запрос с JOIN, например:

SELECT Clients.* FROM Clients
JOIN Companies ON Companies.client_id = Clients.client_id
WHERE company_name LIKE '%omega%'

С соответствующим предотвращением SQL-инъекций и выбором необходимых полей.

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