djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))

MySQL: как грамотно составить запросик?

Имеются две связанные таблицы: Товар и Опции

GOODS
goods_id
goods_name


OPTIONS
opt_id
opt_goods_id
opt_val


В таблицах, к примеру, данные:

GOODS

goods_id: 1
goods_name: Пиджак замшевый

goods_id: 2
goods_name: Магнитофон импортный


OPTIONS

opt_id: 1
opt_goods_id: 1
opt_val: зеленый 

opt_id: 2
opt_goods_id: 1
opt_val: синий

opt_id: 3
opt_goods_id: 2
opt_val: большой

opt_id: 4
opt_goods_id: 2
opt_val: маленький


Как грамотно построить запрос mySQL, чтобы в итоге средствами php получить вывод аналогичный такому:

Пиджак замшевый
--- зеленый
--- синий

Магнитофон импортный
--- большой
--- маленький

Пока что (с использованием JOIN) имею

либо

Пиджак замшевый --- зеленый
Пиджак замшевый --- синий
Магнитофон импортный --- большой
Магнитофон импортный --- маленький

либо (GROP BY)

Пиджак замшевый --- зеленый
Магнитофон импортный --- большой

Спасибо за внимание :-)
  • Вопрос задан
  • 250 просмотров
Решения вопроса 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
В данной ситуации - просто через join получать вывод
Пиджак замшевый --- зеленый
Пиджак замшевый --- синий
Магнитофон импортный --- большой
Магнитофон импортный --- маленький

и в php строить по нему дерево или что хочется.

На чистом SQL задача без диких извращений и геморроя не решается.
Ответ написан
Комментировать
heksen
@heksen
SELECT goods.name, opt.val FROM 'goods' INNER JOIN 'options' ON opt_goods_id=goods_id

Ну а дальше ручками. Как-то так:

$a = [...];
$b = [];

foreach ($a as $item) {
    if (!array_key_exists($item['goods_name'], $b)) {
        $b[$item['goods_name']] = [];
    }

    if (!in_array($item['opt_val'], $b[$item['goods_name']])) {
        $b[$item['goods_name']][] = $item['opt_val'];
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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