Получить уникальный идентификатор, используя другой столбец, используя mysql

У меня есть две таблицы.

  • действие
  • Компания

Действие связано с компанией company_id

Итак, в таблице действий, action_id является первичным ключом и автоматически увеличивается. На основе company_id информация будет отображаться. Если пользователь имеет company_id 1 назначенный ему, и он вошел в систему, он может делать действия, связанные с company_id 1. У другой компании будут разные действия с большим количеством action_ids. Для каждой компании я хочу создать уникальный action_id, Как мне этого добиться?

Например:
Есть 3 компании, использующие мой модуль действий

Компания, B компания, С компанией

  1. Компания сначала создает 10 действий.
    • Теперь у нас есть action_idс 1 по 10 назначено в таблице действий.
  2. Сейчас B компания создает 5 действий.
    • Теперь у нас есть action_id с 11-15 назначено в таблице действий
  3. Сейчас С компанией создает 5 действий.

    • Теперь у нас есть action_idс 16-20 назначено.

    • Поэтому, когда я показываю action_idв Компания будет отображаться с 1 по 10

    • Но в B и C компания у них будет отображаться идентификатор ошибки.
    • Насколько компании знают, что это первое созданное ими действие, но action_id будет отображаться как 11, 12 и так далее.
    • Как мне решить эту проблему?

Ожидаемый результат:

введите описание изображения здесь

0

Решение

Вы можете использовать concat (company_id, «_», action_id) как unique_id

-> MySQL-CONCAT-функция

0

Другие решения

я хотел бы использовать INSERT...SELECT при вставке новых идентификаторов в таблицу, чтобы вы могли быть уверены, что у вас правильный счет:

INSERT INTO action (company_id, uid)
SELECT :company AS company_id, COUNT(*) + 1 AS uid
FROM action
WHERE action.company_id = :company

Конечно, это означает, что после удаления ваши идентификаторы больше не будут непрерывными. Если вы хотите автоматически генерировать уникальные идентификаторы, то с чистым sql это становится немного сложнее. Честно говоря, я бы просто использовал что-то вроде индекса массива (если число является важной частью) для именования на данном этапе, вместо того, чтобы хранить его вручную, особенно если это вычисляемые данные.

$actions = /* your actions retrieval, assume associative array */;
$actions[0]; //uid == 1, index == 0, etc
0

По вопросам рекламы [email protected]