powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Доработка запроса MSQL
4 сообщений из 4, страница 1 из 1
Доработка запроса MSQL
    #40108864
Маркec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

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

Сам запрос:

SELECT G.GoodId AS 'GoodId',
G.Barcode AS 'GTIN',
G.Name AS 'Наименование товара',
GROUP_CONCAT(DISTINCT A2478.Value ORDER BY 1 SEPARATOR ';') AS 'Наименование товара',
GROUP_CONCAT(DISTINCT CONCAT(A13914.Type, ': ', A13914.Value) ORDER BY 1 SEPARATOR ';') AS 'МодельАртикул',
GROUP_CONCAT(DISTINCT A13905.Value ORDER BY 1 SEPARATOR ';') AS 'Вид обуви',
GROUP_CONCAT(DISTINCT A15799.Value ORDER BY 1 SEPARATOR ';') AS 'Цвет',
GROUP_CONCAT(DISTINCT A13886.Value ORDER BY 1 SEPARATOR ';') AS 'Размер в штихмассовой системе',
GROUP_CONCAT(DISTINCT A13939.Value ORDER BY 1 SEPARATOR ';') AS 'Материал верха',
GROUP_CONCAT(DISTINCT A13942.Value ORDER BY 1 SEPARATOR ';') AS 'Материал подкладки',
GROUP_CONCAT(DISTINCT A13948.Value ORDER BY 1 SEPARATOR ';') AS 'Материал подошвы'
СЮДА ???????

FROM Lst_Cat r
JOIN Lst_Cat c ON c.left BETWEEN r.left AND r.right AND r.CatId IN (298870)
JOIN Lst_GoodsToCat gtc ON gtc.CatId = c.CatId AND c.Deleted = 0
JOIN Lst_Goods G ON G.GoodId = gtc.GoodId AND gtc.Deleted = 0

LEFT JOIN Lst_AttrValues A2478 ON A2478.GoodId = G.GoodId AND A2478.AttrId = 2478 AND A2478.Deleted = 0
LEFT JOIN Lst_AttrValues A13914 ON A13914.GoodId = G.GoodId AND A13914.AttrId = 13914 AND A13914.Deleted = 0
LEFT JOIN Lst_AttrValues A13905 ON A13905.GoodId = G.GoodId AND A13905.AttrId = 13905 AND A13905.Deleted = 0
LEFT JOIN Lst_AttrValues A15799 ON A15799.GoodId = G.GoodId AND A15799.AttrId = 15799 AND A15799.Deleted = 0
LEFT JOIN Lst_AttrValues A13886 ON A13886.GoodId = G.GoodId AND A13886.AttrId = 13886 AND A13886.Deleted = 0
LEFT JOIN Lst_AttrValues A13939 ON A13939.GoodId = G.GoodId AND A13939.AttrId = 13939 AND A13939.Deleted = 0
LEFT JOIN Lst_AttrValues A13942 ON A13942.GoodId = G.GoodId AND A13942.AttrId = 13942 AND A13942.Deleted = 0
LEFT JOIN Lst_AttrValues A13948 ON A13948.GoodId = G.GoodId AND A13948.AttrId = 13948 AND A13948.Deleted = 0
СЮДА ???????


WHERE G.Status = 'published'
AND G.IsTechGTIN = 0
GROUP BY 1, 2, 3

//////////////////////

Необходимо дописать получение одного атрибута ТНВЭД:
В таблице Lst_GoodsToCat хранится 3 записи для каждого товара, где выглядит (приложен скрин) то есть для каждого товара есть 3 записи всегда, где одна это id категории ТНВЭД.
В случае с товаром на скрине ТНВЭД значение ищем по catid для обуви между 308353 AND 321853 подходит только одно значение 316774 и вот по нему нужно дернуть таблицу Lst_Cat, чтобы получить значение ТНВЭД, которое берем из столбца PartyCatId.
...
Рейтинг: 0 / 0
Доработка запроса MSQL
    #40108882
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доработка запросов, особенно с добавлением таблиц в источник данных - весьма неблагодарное занятие. Гораздо разумнее создать заново.
...
Рейтинг: 0 / 0
Доработка запроса MSQL
    #40108902
Маркec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, добрый день,

таблицы приведены в качестве информации где хранится атрибут который нужно выдернуть как остальные в запросе.
Товар каждый имеет набор атрибутов привязанный к классификатору в системе и естественно значения этих атрибутов заведенные пользователем. Запросом я нахожу в дереве классификатора нужный мне диапазон id для конкретной товарной группы, после этого дергаю id конкретных атрибутов этой товарной группы. Результат : нажимаю выгрузить ексель отчет и php выгружает мне отчет в ексель где таблица со всеми атрибутами и всеми товарами удовлетворяющих условиям запроса. Остается чтобы в ексель попал последний столбец ТНВЭД и значение его для каждого товара, которые уже выгружаются.

Если остальные атрибуты в одной таблице хранятся и они уже выдернуты со своими значениями. и как писал запрос рабочий.
То моя просьба была, как сфомировать строку запроса значения атрибута ТНВЭД в этот же запрос и даже пометил места красным куда добавлять необходимо строку запроса значения атрибута ТНВЭД для товара.

Таблица это скрин из базы где лежит таблица посредник участвующая в запросе. В этой таблице для каждого товара лежит 3 значения catid и только одно из них это catid для ТНВЭД и нам нужно в запросе использовать сверку 3-х значкений catid для каждого товара чтобы попал в нужный диапазон этот номер catid. Узнав из этой таблицы catid нужно с ним обратится в таблицу следующую где хранится связка этого catid с реальным номером кода ТНВЭД и вот его добавить к выводу в отчете в качестве еще одного столбца.


Я пока не знаю синтаксиса запросов и поэтому пытаюсь учиться на ходу поскольку хочу сделать рабочий запрос полностью со всеми атрибутами.
Мои размышления про добавления ниже:

SELECT
G.GoodId AS 'GoodId',
G.Barcode AS 'GTIN',
GROUP_CONCAT(DISTINCT A2478.Value ORDER BY 1 SEPARATOR ';') AS 'Наименование товара',
GROUP_CONCAT(DISTINCT CONCAT(A13914.Type, ': ', A13914.Value) ORDER BY 1 SEPARATOR ';') AS 'МодельАртикул',
GROUP_CONCAT(DISTINCT A13905.Value ORDER BY 1 SEPARATOR ';') AS 'Вид обуви',
GROUP_CONCAT(DISTINCT A15799.Value ORDER BY 1 SEPARATOR ';') AS 'Цвет',
GROUP_CONCAT(DISTINCT A13886.Value ORDER BY 1 SEPARATOR ';') AS 'Размер в штихмассовой системе',
GROUP_CONCAT(DISTINCT A13939.Value ORDER BY 1 SEPARATOR ';') AS 'Материал верха',
GROUP_CONCAT(DISTINCT A13942.Value ORDER BY 1 SEPARATOR ';') AS 'Материал подкладки',
GROUP_CONCAT(DISTINCT A13948.Value ORDER BY 1 SEPARATOR ';') AS 'Материал подошвы',
"PartyCatId" AS 'ТНВЭД'


FROM Lst_Cat r
JOIN Lst_Cat c ON c.left BETWEEN r.left AND r.right AND r.CatId IN (298870)
JOIN Lst_GoodsToCat gtc ON gtc.CatId = c.CatId AND c.Deleted = 0
JOIN Lst_Goods G ON G.GoodId = gtc.GoodId AND gtc.Deleted = 0

LEFT JOIN Lst_AttrValues A2478 ON A2478.GoodId = G.GoodId AND A2478.AttrId = 2478 AND A2478.Deleted = 0
LEFT JOIN Lst_AttrValues A13914 ON A13914.GoodId = G.GoodId AND A13914.AttrId = 13914 AND A13914.Deleted = 0
LEFT JOIN Lst_AttrValues A13905 ON A13905.GoodId = G.GoodId AND A13905.AttrId = 13905 AND A13905.Deleted = 0
LEFT JOIN Lst_AttrValues A15799 ON A15799.GoodId = G.GoodId AND A15799.AttrId = 15799 AND A15799.Deleted = 0
LEFT JOIN Lst_AttrValues A13886 ON A13886.GoodId = G.GoodId AND A13886.AttrId = 13886 AND A13886.Deleted = 0
LEFT JOIN Lst_AttrValues A13939 ON A13939.GoodId = G.GoodId AND A13939.AttrId = 13939 AND A13939.Deleted = 0
LEFT JOIN Lst_AttrValues A13942 ON A13942.GoodId = G.GoodId AND A13942.AttrId = 13942 AND A13942.Deleted = 0
LEFT JOIN Lst_AttrValues A13948 ON A13948.GoodId = G.GoodId AND A13948.AttrId = 13948 AND A13948.Deleted = 0

LEFT JOIN Lst_GoodsToCat CatId ON CatId.GoodId = G.GoodId AND CatId.GoodId BETWEEN 308353 AND 321853
LEFT JOIN Lst_Cat PartyCatId ON PartyCatId.CatId=CatId.GoodId


WHERE G.Status = 'published'
AND G.IsTechGTIN = 0
GROUP BY 1, 2
...
Рейтинг: 0 / 0
Доработка запроса MSQL
    #40109924
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Маркec

Код: sql
1.
2.
3.
4.
FROM Lst_Cat r
JOIN Lst_Cat c ON c.left BETWEEN r.left AND r.right AND r.CatId IN (298870)
JOIN Lst_GoodsToCat gtc ON gtc.CatId = c.CatId AND c.Deleted = 0
JOIN Lst_Goods G ON G.GoodId = gtc.GoodId AND gtc.Deleted = 0


Интересный состав предикатов. Он вообще имеет какой-то смысл? Я про последние условия в ON.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Доработка запроса MSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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