Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Вывод производителей в префиксе

20.08.2013, 16:30
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 44

Добрый день!
Задача: вывести производителей, которые привязаны к товарам в конкретной категории.

Например:

Раздел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
Сообщений: 479

Код:
<?=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
Сообщений: 44

Цитата:
Код:
<?=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
Сообщений: 479

Выпадающий список
Код:
<select>
<option></option>
</select>


Множественный выбор:
Код:

<select size="3" multiple="multiple">
<option></option>
</select>

size - количество отображаемых строк списка.

Stark
21.08.2013, 17:39
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 44

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 - будет нашим реальным кол-вом
198 196 2014-11-20 19:13:27 13227
Описание проекта