Задать вопрос
@RuRoman

Можно ли составить mysql запрос с выборкой не определенного множества полей?

В сложных выборках не силен, поэтому вопрос
К примеру есть 3 таблицы

1таблица "товар"
id
name - Название
desc - Описание

2таблица "Свойства"
id
name - Название свойства

3таблица "свойства товара"
id_prod - ID товара
id_prop - ID свойства
val - значение

У каждого товара может быть любое количество свойств, разное.

Можно ли одним запросом вывести все товары и свойства которые соответствуют данному товару
id товара, название, свойство, значение......все свойства, значения.

1; Ручка; Цвет; Синий; Цена; 10
2; Нож; Материал; Цена; 200; Рукоятка; Дерево; Фото; Есть;
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 5
@Kypidon4ik
Фрилансер, Wordpress developer
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
JOIN, GROUP_BY, JSON_OBJECTAGG, JSON_ARRAYAGG
Ответ написан
Комментировать
@alexalexes
Можете, но свойства будут не в пределах строки (горизонтально), а в пределах колонки (вертикально).
С помощью SQL вы можете, не забивая микроскопом гвозди, извлечь вот такой результат:
Ручка; Цвет; Синий;
Ручка; Цена; 10
Нож; Материал; Дерево;
Нож; Цена; 200;
Нож; Рукоятка; Дерево; 
Нож; Фото; Есть;

А дальше скриптом, который отвечает за вывод итогового формата документа, делаете необходимые группировки и форматирование.
Ответ написан
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Вам нужно объединить 2 таблицы (Товары, Свойства) через отношения, которые даны у вас в таблице (Свойства товаров).

Возможно написать что-нибудь в таком стиле (но это просто, как пример, он может для Вас не подойти):
SELECT 
    item_name,
    GROUP_CONCAT(prop_value) AS props
FROM
	(  
    SELECT 
        l.name AS item_name,
        r.name AS prop_name,
        z.val AS prop_value
    FROM 
        items AS l
        INNER JOIN 
        props_to_items AS z
        ON 
        l.id = z.item_id
        INNER JOIN 
        props AS r
        ON
        z.prop_id = r.id
	) AS total_info
GROUP BY 
	item_name


Что выведет в результате вот такое:
| item_name | GROUP_CONCAT(prop_value) |
| --------- | ------------------------ |
| item_1     | Prop_1,Prop_2,Prop_3.    |
| item_2     | Prop_1,Prop_2,Prop_3     |

---
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
Можно ли одним запросом вывести все товары и свойства которые соответствуют данному товару
id товара, название, свойство, значение......все свойства, значения.

1; Ручка; Цвет; Синий; Цена; 10
2; Нож; Материал; Цена; 200; Рукоятка; Дерево; Фото; Есть;

Приведённый хреново форматированный текст не позволяет понять, где какое поле, и какой в нём тип данных.

Полное ощущение, что автору требуется куча колонок (в смысле полей в структуре выходного набора). ТО есть если свойство одно, полей 4, если свойств 2, полей 6, и так далее...

Если так, то требуемый результат называется "сводная таблица" (pivot table). Это совсем даже не реляционная структура, у которой нет и тени шанса попасть в стандарт, а потому практически ни одной СУБД штатно не поддерживается. Из популярных оно есть исключительно в SQL Server, да и там скорее исторически сложилось, чем нужно было.

В MySQL / MariaDB ничего подходящего нет. И если кому оно реально необходимо, приходится возиться руками - хранимая процедура, динамический код... хотя на порядок разумнее оставить данные в EAV, а сводную таблицу строить на клиенте на его сервисе отчётов.

Если же устроит выдача всех свойств, собранных в одно сериализованное поле (например, объект JSON) - то это обычная группировка и агрегация.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы