Объедините Несколько дочерних строк в один MySQL строки

Этого нельзя достичь с помощью css, вы можете использовать JS / jQuery, как показано в следующем коде

if($('.banner-description').html()==''){
 $('.bannerbox').hide();
}

Надеюсь, это сработает.

65
задан Kermit 10 October 2012 в 14:55
поделиться

6 ответов

Ответ Joe Edel себе является на самом деле правильным подходом для разрешения проблемы центра.

В основном идея состоит в том, чтобы перечислить столбцы в базовой таблице во-первых и затем любое количество options.value от совместной таблицы опции. Всего left join та же таблица опции многократно для получения всех опций.

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

0
ответ дан 24 November 2019 в 15:23
поделиться

Самый простой способ - использовать здесь групповую функцию GROUP_CONCAT ..

select
  ordered_item.id as `Id`,
  ordered_item.Item_Name as `ItemName`,
  GROUP_CONCAT(Ordered_Options.Value) as `Options`
from
  ordered_item,
  ordered_options
where
  ordered_item.id=ordered_options.ordered_item_id
group by
  ordered_item.id

Что выведет:

Id              ItemName       Options

1               Pizza          Pepperoni,Extra Cheese

2               Stromboli      Extra Cheese

Таким образом, вы можете иметь столько параметров, сколько захотите, без необходимости измените свой запрос.

А, если вы видите, что ваши результаты обрезаются, вы можете увеличить ограничение размера GROUP_CONCAT следующим образом:

SET SESSION group_concat_max_len = 8192;
109
ответ дан 24 November 2019 в 15:23
поделиться

Я ценю помощь, я действительно думаю, что нашел решение, если кто-то прокомментирует эффективность, я был бы признателен. По сути, я так и сделал. Я понимаю, что его реализация несколько статична, но я делаю то, что мне нужно (простите за неправильный синтаксис)

SELECT
  ordered_item.id as `Id`,
  ordered_item.Item_Name as `ItemName`,
  Options1.Value
  Options2.Value
FROM ORDERED_ITEMS
LEFT JOIN (Ordered_Options as Options1)
    ON (Options1.Ordered_Item.ID = Ordered_Options.Ordered_Item_ID 
        AND Options1.Option_Number = 43)
LEFT JOIN (Ordered_Options as Options2)
    ON (Options2.Ordered_Item.ID = Ordered_Options.Ordered_Item_ID
        AND Options2.Option_Number = 44);
11
ответ дан 24 November 2019 в 15:23
поделиться

Если вам действительно нужно несколько столбцов в вашем результате, а количество вариантов ограничено, вы можете даже сделать это:

select
  ordered_item.id as `Id`,
  ordered_item.Item_Name as `ItemName`,
  if(ordered_options.id=1,Ordered_Options.Value,null) as `Option1`,
  if(ordered_options.id=2,Ordered_Options.Value,null) as `Option2`,
  if(ordered_options.id=43,Ordered_Options.Value,null) as `Option43`,
  if(ordered_options.id=44,Ordered_Options.Value,null) as `Option44`,
  GROUP_CONCAT(if(ordered_options.id not in (1,2,43,44),Ordered_Options.Value,null)) as `OtherOptions`
from
  ordered_item,
  ordered_options
where
  ordered_item.id=ordered_options.ordered_item_id
group by
  ordered_item.id
3
ответ дан 24 November 2019 в 15:23
поделиться

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

Как развернуть схему MySQL сущность-атрибут-значение

1
ответ дан 24 November 2019 в 15:23
поделиться

Если вы знаете, что у вас будет ограниченное количество максимальных опций, я бы попробовал это (например, максимум 4 опций на заказ):

Select OI.ID, OI.Item_Name, OO1.Value, OO2.Value, OO3.Value, OO4.Value

FROM Ordered_Items OI
    LEFT JOIN Ordered_Options OO1 ON OO1.Ordered_Item_ID = OI.ID
    LEFT JOIN Ordered_Options OO2 ON OO2.Ordered_Item_ID = OI.ID AND OO2.ID != OO1.ID
    LEFT JOIN Ordered_Options OO3 ON OO3.Ordered_Item_ID = OI.ID AND OO3.ID != OO1.ID AND OO3.ID != OO2.ID
    LEFT JOIN Ordered_Options OO4 ON OO4.Ordered_Item_ID = OI.ID AND OO4.ID != OO1.ID AND OO4.ID != OO2.ID AND OO4.ID != OO3.ID

GROUP BY OI.ID, OI.Item_Name

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

1
ответ дан 24 November 2019 в 15:23
поделиться
Другие вопросы по тегам:

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