|
|
20.08.2013, 16:30
|
|
Pilot
Тех-Альянс
Зарегистрирован: 2007-02-20
Сообщений: 45
|
Добрый день!
Задача: вывести производителей, которые привязаны к товарам в конкретной категории.
Например:
Раздел1
В разделе 300 товаров. К 150 товарам выбран бренд (множественный выбор) Макита, к 50 товарам АЕГ, к 100 товарам Борк следовательно в префиксе выводим
> Макита
> АЕГ
> Борк
Раздел2
В разделе 200 товаров. К 150 товарам выбран бренд (множественный выбор) Макита, к 50 товарам АЕГ
следовательно в префиксе выводим
> Макита
> АЕГ
Т.Е. нужно выводить только те бренды, которым принадлежат товары в текущем разделе.
Как можно реализовать такую выборку?
Заранее благодарю!
P.S. Система E-Commerce 5.0 Компонент 57.
pilot
|
|
|
20.08.2013, 18:58
|
|
Игорь
Игорь Мишарин
Зарегистрирован: 2011-11-20
Сообщений: 482
|
Код:<?=listQuery("SELECT DISTINCT proizvoditel_Name as Name, proizvoditel_ID as Id FROM Classificator_proizvoditel INNER JOIN Message57 ON Classificator_proizvoditel.proizvoditel_ID = Message57.proizvoditel WHERE Message57.Subdivision_ID = $current_sub[Subdivision_ID] ORDER BY proizvoditel_Name","<option value='\$data[Id]'>\$data[Name]</option>\n");?>
proizvoditel - название вашего списка производителей
Этот запрос для выборки для select'а, шаблон вывода уже можете сами изменить на какой нужно.
Stark
|
|
|
20.08.2013, 21:26
|
|
Pilot
Тех-Альянс
Зарегистрирован: 2007-02-20
Сообщений: 45
|
Цитата:Код:<?=listQuery("SELECT DISTINCT proizvoditel_Name as Name, proizvoditel_ID as Id FROM Classificator_proizvoditel INNER JOIN Message57 ON Classificator_proizvoditel.proizvoditel_ID = Message57.proizvoditel WHERE Message57.Subdivision_ID = $current_sub[Subdivision_ID] ORDER BY proizvoditel_Name","<option value='$data[Id]'>$data[Name]</option>
");?>
proizvoditel - название вашего списка производителей
Этот запрос для выборки для select'а, шаблон вывода уже можете сами изменить на какой нужно.
Спасибо огромное. В случае со списком всё работает. Но если это не список, а множественный выбор. В таком случае что мне нужно изменить?
pilot
|
|
|
20.08.2013, 22:59
|
|
Игорь
Игорь Мишарин
Зарегистрирован: 2011-11-20
Сообщений: 482
|
Выпадающий список
Код:<select>
<option></option>
</select>
Множественный выбор:
Код:
<select size="3" multiple="multiple">
<option></option>
</select>
size - количество отображаемых строк списка.
Stark
|
|
|
21.08.2013, 17:39
|
|
Pilot
Тех-Альянс
Зарегистрирован: 2007-02-20
Сообщений: 45
|
proizvoditel - название моего СПИСКА производителей
Этот запрос для выборки для select'а
А у меня не СПИОСОК, а множественный выбор.
В компоненте 57 поле производитель - тип поля множественный выбор - формат поля proizvoditel
В случае со СПИСКОМ приведенный мною код работает, а вслучае множественного выбора нет. В таблице вместо 1 отображается ,1, или не 2, а ,2,
Множественный выбор мною сделан намеренно. Т.К. в этом случае в перфиксе можно сделать ВЫБОРКУ по нескольким брендам представленным в данной категории.
В случае СПИСКА выборка в префиксе работает только с одним, любым производителем.
pilot
|
|
|
21.09.2013, 15:56
|
|
Руслан Густокашин
Студия Вэлпис
Зарегистрирован: 2012-02-06
Сообщений: 962
|
Вы ведь сами уже частично ответили на свой вопрос.
Если тип поля - множественный выбор, то ID'шки производителей хранятся в поле объекта в таком виде: ",1,4,6," (без кавычек)
Значит алгоритм такой:
1. С помощью функции $db->get_results("select distinct proizvoditel from Message$classID where Subdivision_ID=$sub") делаем выборку всех значений поля Proizvoditel в текущем разделе
2. Результаты get_resulsts парсим с помощью foreach и explode (разделяем все с помощью запятых), складывая ID'шки уже в новый массив. При этом игнорируя "пустышки".
3. Делаем array_unique, чтобы убрать из массива дубли
4. С помощью php-функции вида join(",",$massiv_proizvoditeley) генерируем строку вида "1,2,3,4" (перечисленные через запятую значения элементов массива
5. Если count($massiv_proizvoditeley) не нулевой, то делаем примерно так: listquery("select Proizvoditel_Name from Classificator_Proizvoditel where Proizvoditel_ID IN ($spisok_cherez_zapyatuiu)", ".....")
В результате получите то, что вам нужно. :-) Надеюсь, что помог. Тут главное, чтобы моя идея была понятна, а адаптировать ее под себя уже без проблем сможете.
|
|
|
19.11.2014, 11:40
|
|
Вячеслав
Студия "Кронос"
Зарегистрирован: 2013-04-12
Сообщений: 91
|
Как подсчитать правильно количество в таком в одном запросе?
Вывод значения сделать можно, а вот кол-во считается не корректно. Поля, где стоят значения через запятую (1,2,3,4) - игнорируются при count
|
|
|
20.11.2014, 19:13
|
|
Вячеслав
Студия "Кронос"
Зарегистрирован: 2013-04-12
Сообщений: 91
|
Отвечу сам, вполне может кому нибудь пригодиться
Сначала делаем выборку всего безобразия из таблицы Message, получим что то в таком роде
$vyborka = ,1,,2,,3,,4,,1,,2,,15,,15,
Затем делаем выборку из таблицы Classificator_... получаем нужные ID,
к примеру получим $id = 1 2 3 4
Затем для подсчета воспользуемся функцией php
$id_count = substr_count( "$vyborka,", ",".$id.",");
$id_count - будет нашим реальным кол-вом
|