powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных из 3 таблиц
8 сообщений из 8, страница 1 из 1
Вывод данных из 3 таблиц
    #39973357
yaneznay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Помогите разобраться, пожалуйста. в следующем вопросе:
Есть 3 таблицы в БД

1. tb_orders
id, client_id, order_data, order_manager, order_status

2. tb_clients
id, client_company

3. tb_items
id, client_id, order_id, item_name

Мне необходимо получить одну таблицу с заказами следующего вида:
tb_orders.id , tb_clients.client_company , tb_items.item_name , tb_orders.order_data , tb_orders.order_manager , tb_orders.order_status

Вот таким запросом получилось вывести все кроме : tb_items.item_name
"SELECT tb_orders.id, tb_clients.client_company, tb_orders.order_data, tb_orders.order_manager, tb_orders.order_status, tb_orders.client_id
FROM tb_orders
INNER JOIN tb_clients ON tb_orders.client_id=tb_clients.id ORDER BY id DESC";

tb_orders.id , tb_clients.client_company , tb_items.item_name , tb_orders.order_data , tb_orders.order_manager , tb_orders.order_status

Каким образом добавить вывод tb_items.item_name ?
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973359
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaneznay
Есть 3 таблицы в БД
Это три записи в одной таблице, а не три таблицы.
yaneznay
Помогите разобраться, пожалуйста. в следующем вопросе
А сам вопрос-то в чем?
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973360
yaneznay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Не понял как все картинки добавить, расписал более подробно в описании, на картинку не обращайте внимания ))
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973364
yaneznay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так должно в итоге получиться
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973371
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaneznay,

Именно так, как нарисовано в целевой таблице, SQL не умеет в принципе.

Тут возможны варианты:
1) Во всех полях, кроме item_name будут продублированы значения, в результате 5 записей.
2) В поле item_name будет несколько значений через разделитель. В результате 2 записи.
3) Как-то еще.
Выбор зависит от того, как умеет отображать данные тот инструмент, которым строится отчет.
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973374
yaneznay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В tb_items я записываю позиции, которые добавляю в определенный заказ.

Когда программа была совсем маленькой, у меня получалось выводить из двух таблиц.
То есть допустим: Заказ №1, в нем добавлены 3 наименования товара.
Я выводил так:
Номер заказа | Позиции заказа
1 - товар 1
- товар 2
- товар 3

2 - товар 1
- товар 2


Потом насмотрелся про нормализации БД, и переделал таблицы (добавил новые и тд)
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973411
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yaneznay
Есть 3 таблицы в БД
Схема - говно противоречива. Один и тот же итем может ссылаться на одного юзера прямо, и совсем на другого через ордеры. Поле юзера в итемах - удалить нахрен.

Итоговая связь таблиц, если удалить указанное поле, будет выглядеть так:

Код: sql
1.
2.
3.
FROM tb_clients
JOIN tb_orders ON tb_orders.client_id = tb_clients.id
JOIN tb_items ON tb_items.order_id = tb_orders.id



Для получения показанного результата, в котором итемы собраны в одном поле одной записи, придётся группировать по всем остальным полям. Это будет выглядеть так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT tb_orders.id, 
       tb_clients.client_company, 
       GROUP_CONCAT(tb_items.item_name SEPARATOR '\n') order_item_names,
       tb_orders.order_manager, 
       tb_orders.order_status, 
       tb_orders.client_id
FROM tb_clients
JOIN tb_orders ON tb_orders.client_id = tb_clients.id
JOIN tb_items ON tb_items.order_id = tb_orders.id
GROUP BY tb_orders.id, 
         tb_clients.client_company, 
         tb_orders.order_manager, 
         tb_orders.order_status, 
         tb_orders.client_id



Для того, чтобы в поле order_item_names добавить ещё и порядковые номера - их придётся сперва получить. В версии 8+ это легко делается функцией ROW_NUMBER() в CTE, на 5.x версии придётся геморроиться с переменными или с двумя копиями таблиц в подзапросе. Если очень надо - развлекайся, мне лень.
...
Рейтинг: 0 / 0
Вывод данных из 3 таблиц
    #39973725
yaneznay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Спасибо за подробный ответ!
И итемах я держу client_id, чтобы возвращаться со страницы создания итема на страницу заказа (а на ней же сбоку выводится инфо о текущем клиенте, к которому этот заказ относится )))) )
Вот так все запутано))) Но я понял, что мне проще добавление итема сделать через модальное окно и убрать страницу создания...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных из 3 таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]