Настраиваемые поля для таблицы клиентов в CRM. Генерация таблиц?

Ссылка скопирована
1 ответ

Попросили в crm на PHP дописать для другого офиса настраиваемые поля для базы клиентов.
Как это обычно реализовывается?
Генерацией таблицы в mysql под нужные поля из PHP?
В одной ячейке поля хранить можно конечно в виде json, но тогда сортировки по ним не будет.
Нагуглила что в других црм тоже некоторых есть такое, и как они под каждого клиента подстраиваются? Если под каждого клиента таблицу создавать, таблиц ведь совсем тогда много будет. Это нормально для БД?

Дополнительно:

Dr. Bacon, перепроверила, всё ещё нельзя.
Если в одной ячейке хранится информация по 10-ти полям в виде json-строки, то как средствами mysql сделать select с сортировкой по 7-му полю?

  • Avreliya777,

    EntityID, ID, Name, Value

    Где
    EntityID = Клиент
    ID = ID в таблице клиент
    Name = название поля
    Value = значение поля

    LEFT JOIN в руки и SELECTы строчить

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

  • но тогда сортировки по ним не будет

    Сортировка-то по-любому будет - если можно извлечь отдельное значение, то можно по извлечённому и сортировать.
    Другой вопрос - можно ли это делать эффективно. А вот тут всё зависит от точного вида данных и версии MySQL.

    Как это обычно реализовывается?

    Самый обычный подход - это всё же EAV. Сериализация (включая JSON) - всё же на втором месте.

    Если под каждого клиента таблицу создавать, таблиц ведь совсем тогда много будет. Это нормально для БД?

    А вот это как раз совершенно ненормально.
    Вот если "клиент" - это отдельный MySQL-аккаунт, тогда нормально. Но не таблица, а БД. И то больше по причине безопасности и разделения доступа.

  • Dr. Bacon, блин, вот я отстала от жизни, даже не знала о JSON_EXTRACT, я так поняла вы это имели в виду. Блин, но разве это эффективно? Тут за производительность бьёшься созданием ключей на нужные поля, оптимизируя сами запросы и прочее прочее... а тут мало того что извлечь нужно так ещё и отсортировать. Кажется совсем мало эффективно будет, сделаю вот так, а потом будут люди по полчаса ждать ответы на запросы в поиске. Алексей Горбунов вот видимо тоже это имел в виду.
  • Алексей Горбунов, хмм, получается как бы не база клиентов, а база полей со значениями для всех клиентов, верно? Не приходило мне что-то такое в голову, выглядит заманчиво и эффективно вроде. А это не то ли, что называется EAV, про которое Akina вот чуть ниже написала (про eav просто не слышала даже, предстоит погуглить).
  • Akina, так, генерация таблиц - плохая идея. Это уже хорошо, что хоть что-то можно сразу отмести)
    А можете при EAV пример малюсенький применительно к моей ситуации привести? Вот там выше Алексей Горбунов пример привёл хороший вроде, это оно?
    А вот про сортировки по json, тут да, меня вот тоже сомнения берут по производительности. Там ведь ключей даже никаких нет.
  • Avreliya777,

    А можете при EAV пример малюсенький применительно к моей ситуации привести?

    Дык Алексей уже всё привёл, там и добавить-то особо нечего. Ну кроме правильной расшифровки аббревиатуры: EAV == Entity-Attribute-Value. Для поиска. Ну и обычно ID референсной записи в структуре ставят в начало - но это, само собой, бантики.

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

    А вот про сортировки по json, тут да, меня вот тоже сомнения берут по производительности.

    Ну я уже сказал - зависит от версии сервера и данных. Свежие версии MySQL поддерживают multivalued indices, хоть и с кучей ограничений (и баги имеются - пользовать осторожно). Кроме того, никто не отменял виртуальных индексированных вычисляемых полей - при фиксированном имени JSON-компонента для сортировки подходят идеально. Правда, при сортировке по зависимой таблице использование сервером индекса из неё при сортировке - штука достаточно редкая, filesort оказывается эффективнее, особенно при высокой селективности запроса.

  • Akina, так, всё поняла. Спасибо большое за разъяснение! Выбор есть, что-нибудь из этого выберу!
  • Прям совсем много данных? Просто думал, что можно переложить на пыху
  • Надо понимать, что именно хотите добавить.
    Из описания видится три варианта:
    1) Хотите добавить новое конкретное поле к данным клиента.
    Тут всё просто, в текущей таблице с клиентом добавляете новое поле в базе, а со стороны crm настраиваете его редактирование и отображение.
    2) Хотите добавить n- новых конкретных полей к данным клиента. Для этого делаете новую таблицу со справочником новых полей, где описываете название, тип, значение и ещё одну таблицу, в которой потребуется хранить связь доп. поля и клиента. Например, id клиента, id поля из справочника и значение. Таким образом можно будет проще управлять справочником доп полей и основная таблица с клиентами не превратится в горизонтальную.
    3) Хотите добавить n- полей, не знаете каких - это будут добавлять пользователи. Для этого берём п2 и дополнительно реализовываем добавление кастомных доп полей со стороны crm., чтобы пользователи могли редактировать справочник доп полей.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Для настройки полей таблицы клиентов в 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>';
    ?&gt;

    1, 'name' =&gt; 'Иванов Иван', 'email' =&gt; 'ivanov@example.com'], ['id' =&gt; 2, 'name' =&gt; 'Петров Петр', 'email' =&gt; '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>'; ?&gt;

    Этот код извлекает данные о клиентах из CRM и формирует таблицу с колонками "ID", "Имя" и "Email". Вы можете дополнить этот код другими полями и параметрами в зависимости от ваших потребностей. Не забудьте адаптировать этот код под вашу CRM систему и данные, с которыми вы работаете.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно