Этого нельзя достичь с помощью css, вы можете использовать JS / jQuery, как показано в следующем коде
if($('.banner-description').html()==''){
$('.bannerbox').hide();
}
Надеюсь, это сработает.
Ответ Joe Edel себе является на самом деле правильным подходом для разрешения проблемы центра.
В основном идея состоит в том, чтобы перечислить столбцы в базовой таблице во-первых и затем любое количество options.value
от совместной таблицы опции. Всего left join
та же таблица опции многократно для получения всех опций.
, Что потребности быть сделанным языком программирования должен создать этот запрос динамично согласно списку опций, должен быть запрошен.
Самый простой способ - использовать здесь групповую функцию 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;
Я ценю помощь, я действительно думаю, что нашел решение, если кто-то прокомментирует эффективность, я был бы признателен. По сути, я так и сделал. Я понимаю, что его реализация несколько статична, но я делаю то, что мне нужно (простите за неправильный синтаксис)
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);
Если вам действительно нужно несколько столбцов в вашем результате, а количество вариантов ограничено, вы можете даже сделать это:
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
То, что вы хотите, называется стержнем, и это не напрямую поддерживается в MySQL, ознакомьтесь с этим ответом, чтобы узнать о доступных вам вариантах:
Если вы знаете, что у вас будет ограниченное количество максимальных опций, я бы попробовал это (например, максимум 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 строка для каждого родительского элемента.