Получить результат на основе последнего набора статуса в объединенной таблице

Доброе утро!

У меня есть следующая настройка базы данных:

  • таблица заказов: содержит все заказы, включая соответствующий магазин
  • таблица shop_status: содержит все статусы для каждого магазина
  • таблица orders_status: содержит order_id, status_id соответствующего магазина и статус, а также дату, когда был установлен статус

вот операторы db (без индизов и прочего, столбцов гораздо больше, но отмечу только нужные, запросы выполняться не будут):

CREATE TABLE IF NOT EXISTS d02bc910.orders (
  id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  shops_id INT(10) UNSIGNED NOT NULL,
  created_at TIMESTAMP NULL DEFAULT NULL,
  updated_at TIMESTAMP NULL DEFAULT NULL,
  PRIMARY KEY (id);

CREATE TABLE IF NOT EXISTS d02bc910.shops_status (
  shops_status_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  shops_id INT(10) UNSIGNED NOT NULL,
  translations_id INT(10) UNSIGNED NOT NULL,   <= the software's multilingual so I use translations here
  status_order TINYINT(3) NOT NULL,
  PRIMARY KEY (shops_status_id);

CREATE TABLE IF NOT EXISTS d02bc910.orders_status (
  order_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  status_id INT(10) UNSIGNED NOT NULL,
  users_id INT(10) UNSIGNED NOT NULL,
  updatedAt DATETIME NOT NULL;

Что я хочу сделать сейчас, так это создать отчет, содержащий все заказы, соответствующие различным параметрам поиска, включая последний статус для этого соответствующего заказа. Но я не знаю, как совместить JOIN с order_status с последним установленным status_id. Я мог бы сделать это в PHP foreach впоследствии, но тогда мне пришлось бы либо сначала собрать все идентификаторы, запустить оператор, а затем сопоставить результаты, но я думаю, что есть способ сделать это в SQL.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

Заранее спасибо, С

Меня смущает эта схема. Я вижу, что существует взаимосвязь между заказами и orders_status (orders.id = orders_status.order_id), но я не понимаю, при чем тут shop_status или откуда берется самый последний статус. Вы можете уточнить вопрос, добавив образцы данных и ожидаемый результат в виде текста.

P.Salmon 03.02.2019 10:15

таблица shop_status содержит все статусы, которые может иметь заказ для этого магазина, поэтому я хотел присоединиться к таблице shop_status, используя shop_status_id ... имена ключей не совпадают, и я на самом деле не очень доволен этим, но я исправлю это позже

gmaltasteffl 03.02.2019 14:18

в результате я хотел бы, чтобы заказ и последний статус были установлены для этого заказа

gmaltasteffl 03.02.2019 14:30
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
28
0

Другие вопросы по теме