miniShop2. Вывод всех цветов из категории товаров

Как вывести содержимое все цветов категории товаров? Т/е перешел в категорию — видишь список всех цветов которые есть у товаров, но без повторений )
Андрей
26 апреля 2013, 22:06
modx.pro
3 136
0

Комментарии: 11

Сергей Фартушный
14 мая 2013, 23:35
0
<?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));
Есть другая проблема. Как выбрать одним запросом уникальные значения из нескольких полей той же таблицы, но не уникальные комбинации этих полей, а именно все уникальные значения каждого поля и одним запросом? Может кто подскажет?
    Василий Наумкин
    15 мая 2013, 05:31
    0
    JSON поля товара копируются в таблицу msProductOption — выбирай оттуда DISTINCT value.
      Сергей Фартушный
      15 мая 2013, 10:31
      0
      в том то и проблема, что нужны не только json поля, но и обычные. Немного изменил логику скрипта, теперь вопрос актуален только в качестве информации на будущее.
      В любом случае спасибо за ответ.
        Василий Наумкин
        15 мая 2013, 10:58
        0
        Опять же на будущее: если поля обычные, они достаются из msProductData, а если JSON, то из msProductOption.

        Так что, легко можно управиться за 2 запроса в БД на неограниченное число параметров.
          Сергей Фартушный
          15 мая 2013, 14:48
          0
          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. Хотя я могу конечно и ошибаться по поводу памяти.
        Сергей Фартушный
        15 мая 2013, 10:44
        0
        А по теме действительно проще будет брать цвета из msProductOption
          Мордынский Николай
          15 мая 2013, 11:06
          0
          так вы бы выложили бы решение для соплеменников то)) повидимому вы это делали для умных выпадающих списков опций товара (либо фильтров) в любом случае думаю многим бы пригодилось для общего развития)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    11