Nano Hash - криптовалюты, майнинг, программирование

Извлечение разных записей из нескольких таблиц в виде одного списка истории транзакций

Я работаю над системой управления/вознаграждения сотрудников, и мне нужно иметь возможность отображать одну страницу «истории транзакций», которая показывает в хронологическом порядке различные события, с которыми столкнулся сотрудник, в одном списке. (Наподобие того, как в Facebook вы можете перейти в раздел истории/действий и увидеть хронологический список всех вещей, которые вы сделали и которые влияют на вас, даже если они не связаны друг с другом и вы просто являетесь обычным пользователем)

У меня есть разные таблицы для разных событий, каждая таблица имеет ключ employee_id и временную метку «происшедшего», некоторые примеры таблиц:

bonuses
customers
raise
complaints
feedback

Таким образом, всякий раз, когда происходит событие (т. е. новый клиент назначается сотруднику, или сотрудник получает жалобу или повышение), в соответствующую таблицу добавляется новая строка с идентификатором сотрудника, на который оно влияет, и отметкой времени, когда это произошло.

Мне нужен один запрос, чтобы извлечь все записи (например, до 50), которые включают сотрудника, и вернуть представление истории этого сотрудника. Имена полей в каждой таблице разные (например, бонус включает сумму с примечанием, клиент включает информацию о клиенте и т. д.).

Мне нужно, чтобы вывод был сводным представлением с использованием имен столбцов, таких как:

event_type = (new customer, bonus, feedback etc)
date
title (a brief worded title of the type of event, specified in sql based on the table its referencing)
description  (verbiage about the action, such as if its event_type bonus display the bonus amount here, if its a complain show the first 50 characters of the complaint message or the ID of the user that filed the complaint from the complaints table. All done in SQL using if statements and building the value of this field output based on which table it comes from. Such as if its from the customers table IF current_table=customers description='A customer was assigned to you by'.customers.assigner_id).

Идеально,

Есть какой-либо способ сделать это?

Другой вариант, который я рассматривал, - это я мог бы выполнить 5-6 разных запросов, извлекая записи каждый из своей таблицы, а затем использовать команду mysql для «сшивания/перемежения» результатов всех запросов в один список в хронологическом порядке. Это тоже было бы приемлемо


Ответы:


1

Вы можете использовать запрос UNION, чтобы объединить всю информацию вместе, и использовать предложение ORDER BY, чтобы упорядочить действия в хронологическом порядке. Каждый запрос должен иметь одинаковое количество полей. Ваш пункт ORDER BY должен быть последним.

В приведенных ниже примерах предполагается, что у вас есть поле с именем имя_клиента в таблице клиентов и поле Bonus_Amount в таблице бонусов.

Это будет выглядеть примерно так:

SELECT   'New Customer' as event_type, date, 
         'New customer was assigned' as title, 
         CONCAT('New Customer: ', customer_name, ' was assigned') as description
FROM     customers
WHERE    employee_id = 1

UNION

SELECT   'Bonus' as event_type, date, 
         'Received a bonue' as title, 
         CONCAT('Received a bonus of $', FORMAT(bonus_amount, 2), '.') as description
FROM     bonuses
WHERE    employee_id = 1

UNION

...

ORDER BY date DESC;
14.12.2014
  • Спасибо за предложение. Не могли бы вы уточнить, как вы могли бы написать одно из выражений? (Выберите любой образец условий). Прошли годы с тех пор, как я использовал выражения таким образом, и я рисую пробел в синтаксисе (сейчас ищу, но получаю много общих выражений WHERE, или если у вас есть ссылка на эту конкретную статью kb об использовании, которая тоже будет работать) 14.12.2014
  • Я привел пару примеров. 14.12.2014
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..