Все, что я видел до сих пор, - это автоматическое удаление повторяющихся записей в базе данных. В начале хочу подчеркнуть, что в базе данных нет повторяющихся данных . Я также начну с того, что я еще очень много изучаю в области проектирования СУБД, нормализации, отношений и, прежде всего, SQL!
У меня есть таблица клиентов с клиентами (PK) и именем клиента. У меня есть таблица ролей, с ролью (PK) и ролью_имя. Любой клиент может иметь несколько ролей, связанных с ним. Поэтому я создал таблицу client_role_link, в которой в качестве двух полей используются clientid и roleid. Затем я запускаю это:
SELECT client.client_name, role.role_name FROM client
LEFT JOIN client_role_link ON client_role_link.clientid=client.clientid
LEFT JOIN role ON client_role_link.roleid=role.roleid
WHERE (role.roleid='1' OR role.roleid='2')
Итак, допустим, у меня есть клиент, с которым связаны две роли (роли «1» и «2»). Этот запрос возвращает две строки, по одной для каждой роли. Когда я получаю эти результаты обратно, я использую цикл while
для циклического просмотра результатов и вывода их в список <select>
. Затем он вызывает два <option>
с тем же клиентом в списке.
Я понимаю, почему мой запрос возвращает две строки, это имеет смысл. Итак, возникает два вопроса:
- Есть ли лучший дизайн базы данных / таблицы, который мне следует использовать, или более оптимизированный запрос?
- Или это то, что я должен обрабатывать в PHP? Если это так, есть ли более элегантное решение, которое добавляет все результаты в массив, а затем возвращает их обратно в массив и удаляет дубликаты?
Мысли