miniShop2. Вывод всех цветов из категории товаров
Как вывести содержимое все цветов категории товаров? Т/е перешел в категорию — видишь список всех цветов которые есть у товаров, но без повторений )
Комментарии: 11
<?php
$q = $modx->newQuery('msProductData');
$q->select(array('DISTINCT msProductData.color'));
$colors = array();
if ($q->prepare() && $q->stmt->execute()){
foreach($q->stmt->fetchAll(PDO::FETCH_ASSOC) as $color) {
if($color['color'] === NULL || $color['color'] == '[""]') continue;
$colors = array_merge($colors, json_decode($color['color']));
}
}
var_dump(array_unique($colors));
Есть другая проблема. Как выбрать одним запросом уникальные значения из нескольких полей той же таблицы, но не уникальные комбинации этих полей, а именно все уникальные значения каждого поля и одним запросом? Может кто подскажет?
JSON поля товара копируются в таблицу msProductOption — выбирай оттуда DISTINCT value.
в том то и проблема, что нужны не только json поля, но и обычные. Немного изменил логику скрипта, теперь вопрос актуален только в качестве информации на будущее.
В любом случае спасибо за ответ.
В любом случае спасибо за ответ.
Опять же на будущее: если поля обычные, они достаются из msProductData, а если JSON, то из msProductOption.
Так что, легко можно управиться за 2 запроса в БД на неограниченное число параметров.
Так что, легко можно управиться за 2 запроса в БД на неограниченное число параметров.
JSON действительно очень просто можно достать из msProductOption именно в таком формате как нужно, а вот как достать обычные поля из msProductData в таком же формате не придумал. Получается только вытащить уникальные комбинации.
Обрисую пример на словах.
Нужно достать (берем обычные поля, потому как с JSON всё понятно) уникальные значения price, weight и gender (это поле добавлено с помощью плагина). К примеру есть 3 записи в которых эти поля имеют следующие значения соответственно:
100 — 10 — male
123 — 10 — famale
150 — 12 — male
запрос примерно такого содержания
$q = $modx->newQuery('msProductData');
$q->select(array('DISTINCT msProductData.price,msProductData.weight,msProductData.gender'));
даст возможность получить уникальные комбинации, тоесть в результате мы получим 3 строки, которые содержат все эти данные, а нужно получить массив примерно такого содержания
array(
'price'=>array(100,123,150),
'weight'=>array(10,12),
'gender'=>array('male','famale')
)
Безусловно можно его сформировать в скрипте, что, по сути, я на данный момент и сделал, но хотелось получить сразу более удобоваримый результат, в первую очередь потому, что меньше памяти он скушает, ведь если в магазине 15000 товаров, а выбирать нужно не 3 свойства, а скажем 8, то у большинства товаров будут комбинации уникальные, и в результате у нас будет 12000 (к примеру) строк, а уникальных значений на все 8 свойств всего 200. Хотя я могу конечно и ошибаться по поводу памяти.
Обрисую пример на словах.
Нужно достать (берем обычные поля, потому как с JSON всё понятно) уникальные значения price, weight и gender (это поле добавлено с помощью плагина). К примеру есть 3 записи в которых эти поля имеют следующие значения соответственно:
100 — 10 — male
123 — 10 — famale
150 — 12 — male
запрос примерно такого содержания
$q = $modx->newQuery('msProductData');
$q->select(array('DISTINCT msProductData.price,msProductData.weight,msProductData.gender'));
даст возможность получить уникальные комбинации, тоесть в результате мы получим 3 строки, которые содержат все эти данные, а нужно получить массив примерно такого содержания
array(
'price'=>array(100,123,150),
'weight'=>array(10,12),
'gender'=>array('male','famale')
)
Безусловно можно его сформировать в скрипте, что, по сути, я на данный момент и сделал, но хотелось получить сразу более удобоваримый результат, в первую очередь потому, что меньше памяти он скушает, ведь если в магазине 15000 товаров, а выбирать нужно не 3 свойства, а скажем 8, то у большинства товаров будут комбинации уникальные, и в результате у нас будет 12000 (к примеру) строк, а уникальных значений на все 8 свойств всего 200. Хотя я могу конечно и ошибаться по поводу памяти.
А по теме действительно проще будет брать цвета из msProductOption
так вы бы выложили бы решение для соплеменников то)) повидимому вы это делали для умных выпадающих списков опций товара (либо фильтров) в любом случае думаю многим бы пригодилось для общего развития)
Когда закончу, если не стыдно будет показать и если разрешат, обязательно выложу.
да если идея хорошая то народ подхватит и доработает))
Вроде никогда не запрещали.
я имею ввиду разрешат ли те кто мне платит за это
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.