Сортировка по TV

сделал сортировку по цене. но сортировка проходит странно. if($this->getProperty('sort')=='price.value'){ $c->innerJoin('modTemplateVarResource', 'price', "price.contentid = {$this->classKey}.id AND price.tmplvarid = 12"); } результат по убыванию 94.77 90.16 9.8 9.5 9.3 9 89.65 87.3 85.85 результат по возрастанию 10.05 10.95 106.15 106.66 11 11.4 я так понимаю, сортировка идет в строковом представлении. как исправить ситуацию, знает кто-нибудь?

для этого есть простая хитрость в mysql синтаксисе, чтоб сортировала как числовое значение, а не как текст пишешь ORDER BY (value+0), не знаю как с join-ом но такой <?php $query = $modx->newQuery('modResource'); $query->where(array( 'parent' => 70, )); $query->groupby('id+0','DESC'); $boxes = $modx->getCollection('modResource',$query); foreach($boxes as $key=>$val){ $id[$key]=$val->get('id'); } print_r($id); запрос выполнился.

проверил на проекте с числовыми тв вот результаты:как текст как число

cgfcb.j nt,t ,jkmijt lj,hsq xtkjdtr что в переводе с древне-транслитерийского означает «Спасибо тебе, добрый человек»

маленькая замечание в параметры процессора если записывать $params = [ 'sort' => 'price.value+0' ] то не робит, а если $params = [ 'sort' => 'price.value +0' ] то все ок. странно это

там наверное описка, работает $params=['sort'=>'price.value'+0] Ничегострпнного в этом нет. PHP — язык с динамической типизацией, т.е. сложив строку(символьное представление цены) с числом, получается число.

PHP — язык с динамической типизацией, т.е. сложив строку(символьное представление цены) с числом, получается число. А при чем тут PHP? В данном случае это вопрос к MySQL. PHP (xPDO) только подготовит запрос вида price.value + 0, а вот в типу данных Число уже сам мускул приведет.

В обще то да, Николай прав, ошибся.

там наверное описка, работает $params=['sort'=>'price.value'+0] Кстати, только сейчас обратил внимание. Нет, так не правильно. Правильно именно $params=['sort'=>'price.value +0'] А вообще, если кому-то не нравится хак с +0 (что вполне нормально), можно так пробовать: $q->sortby("CAST(price.value as unsigned)");

в процессе появилась еще проблема. код $classKey = 'modResource'; $c = $modx->newQuery($classKey); $c->innerJoin('modTemplateVarResource', 'users', "users.contentid = $classKey.id AND users.tmplvarid = 14"); $c->select(array( "$classKey.id as id" ,"users.value as users" )); $c->sortby('users.value+0','asc'); $where = array('users.value:>=' => intval($users)); $c->where($where); сортирует прекрасно, но фильтр по условию опять же почему-то в строковом представлении т.е. если взять ('users.value:<=' => 5), то в результатах будут 5, 100, 150

отвечаю сам себе modxclub.ru/topics/xpdo-vse-polya-prisoedinyonnyix-tablicz-tipiziruet-kak-strokovyie-1664.html $c->where(array("CAST(users.value AS unsigned) >= $users"));