Настраиваемые поля для таблицы клиентов в CRM. Генерация таблиц?
Попросили в crm на PHP дописать для другого офиса настраиваемые поля для базы клиентов.
Как это обычно реализовывается?
Генерацией таблицы в mysql под нужные поля из PHP?
В одной ячейке поля хранить можно конечно в виде json, но тогда сортировки по ним не будет.
Нагуглила что в других црм тоже некоторых есть такое, и как они под каждого клиента подстраиваются? Если под каждого клиента таблицу создавать, таблиц ведь совсем тогда много будет. Это нормально для БД?
Дополнительно:
Dr. Bacon, перепроверила, всё ещё нельзя.
Если в одной ячейке хранится информация по 10-ти полям в виде json-строки, то как средствами mysql сделать select с сортировкой по 7-му полю?
EntityID, ID, Name, Value
Где
EntityID = Клиент
ID = ID в таблице клиент
Name = название поля
Value = значение поля
LEFT JOIN в руки и SELECTы строчить
можно еще поле Type добавить, где будет тип поля для всяких приведений, но лучше Тип в отдельные настройки.
но тогда сортировки по ним не будет
Сортировка-то по-любому будет - если можно извлечь отдельное значение, то можно по извлечённому и сортировать.
Другой вопрос - можно ли это делать эффективно. А вот тут всё зависит от точного вида данных и версии MySQL.
Как это обычно реализовывается?
Самый обычный подход - это всё же EAV. Сериализация (включая JSON) - всё же на втором месте.
Если под каждого клиента таблицу создавать, таблиц ведь совсем тогда много будет. Это нормально для БД?
А вот это как раз совершенно ненормально.
Вот если "клиент" - это отдельный MySQL-аккаунт, тогда нормально. Но не таблица, а БД. И то больше по причине безопасности и разделения доступа.
А можете при EAV пример малюсенький применительно к моей ситуации привести? Вот там выше Алексей Горбунов пример привёл хороший вроде, это оно?
А вот про сортировки по json, тут да, меня вот тоже сомнения берут по производительности. Там ведь ключей даже никаких нет.
А можете при EAV пример малюсенький применительно к моей ситуации привести?
Дык Алексей уже всё привёл, там и добавить-то особо нечего. Ну кроме правильной расшифровки аббревиатуры: EAV == Entity-Attribute-Value. Для поиска. Ну и обычно ID референсной записи в структуре ставят в начало - но это, само собой, бантики.
Да, предупреждаю сразу - паттерн в общем проблемный. И запросы непростые. да ещё сплошь внешние, и постоянно требуют группировки, посему с производительностью так себе, особенно при ограниченной оперативке. Но зато прекрасно формализуется. и несложно строить динамические запросы.
А вот про сортировки по json, тут да, меня вот тоже сомнения берут по производительности.
Ну я уже сказал - зависит от версии сервера и данных. Свежие версии MySQL поддерживают multivalued indices, хоть и с кучей ограничений (и баги имеются - пользовать осторожно). Кроме того, никто не отменял виртуальных индексированных вычисляемых полей - при фиксированном имени JSON-компонента для сортировки подходят идеально. Правда, при сортировке по зависимой таблице использование сервером индекса из неё при сортировке - штука достаточно редкая, filesort оказывается эффективнее, особенно при высокой селективности запроса.
Надо понимать, что именно хотите добавить.
Из описания видится три варианта:
1) Хотите добавить новое конкретное поле к данным клиента.
Тут всё просто, в текущей таблице с клиентом добавляете новое поле в базе, а со стороны crm настраиваете его редактирование и отображение.
2) Хотите добавить n- новых конкретных полей к данным клиента. Для этого делаете новую таблицу со справочником новых полей, где описываете название, тип, значение и ещё одну таблицу, в которой потребуется хранить связь доп. поля и клиента. Например, id клиента, id поля из справочника и значение. Таким образом можно будет проще управлять справочником доп полей и основная таблица с клиентами не превратится в горизонтальную.
3) Хотите добавить n- полей, не знаете каких - это будут добавлять пользователи. Для этого берём п2 и дополнительно реализовываем добавление кастомных доп полей со стороны crm., чтобы пользователи могли редактировать справочник доп полей.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для настройки полей таблицы клиентов в CRM и их генерации, вам может понадобиться использовать специальные инструменты или плагины, которые предоставляются вашей CRM системой. В зависимости от того, какая CRM вы используете, процесс настройки и генерации таблиц может немного отличаться, но общие шаги можно описать следующим образом:
1. Определите необходимые поля для таблицы клиентов. Это могут быть такие данные, как имя клиента, контактная информация, дата регистрации, статус клиента и т.д. Определите, какие поля вам необходимы и какие типы данных они будут содержать.
2. Создайте пользовательские поля в CRM для каждого из этих параметров. В большинстве CRM систем это можно сделать через панель администратора или раздел настроек.
3. Настройте отображение этих пользовательских полей в таблице клиентов. Вы можете выбрать порядок отображения полей, их ширину, формат отображения и другие параметры.
4. Проверьте, что все поля корректно отображаются в таблице клиентов. Убедитесь, что данные отображаются правильно и что таблица выглядит аккуратно.
5. При необходимости, настройте фильтры и сортировку для таблицы клиентов. Это позволит вам быстро находить нужную информацию и удобно организовывать данные.
Чтобы сгенерировать таблицу клиентов, вам может понадобиться использовать специализированные инструменты или скрипты. Например, вы можете написать скрипт на языке программирования, который будет извлекать данные из CRM и формировать таблицу в нужном формате.
Пример кода на PHP для генерации таблицы клиентов:
1, 'name' => 'Иванов Иван', 'email' => 'ivanov@example.com'], ['id' => 2, 'name' => 'Петров Петр', 'email' => 'petrov@example.com'], // Другие клиенты ]; // Генерация таблицы echo '<table>'; echo '<tr><th>ID</th><th>Имя</th><th>Email</th></tr>'; foreach ($clients as $client) { echo '<tr>'; echo '<td>' . $client['id'] . '</td>'; echo '<td>' . $client['name'] . '</td>'; echo '<td>' . $client['email'] . '</td>'; echo '</tr>'; } echo '</table>'; ?>
Этот код извлекает данные о клиентах из CRM и формирует таблицу с колонками "ID", "Имя" и "Email". Вы можете дополнить этот код другими полями и параметрами в зависимости от ваших потребностей. Не забудьте адаптировать этот код под вашу CRM систему и данные, с которыми вы работаете.