Смысл этой сортировки в том что из таблицы будут полученные поля отсортированные именно в таком порядке как указано, сначала поля у которых значения SS, потом NM и тд.
table.title DESC в конце можно опустить, это не принципиально
нет там этого.
ну ок, еще пояснение
orderBy($field, $direction) - это тоже самое что в запросе написать ORDER BY '$field' ASC (или DESC)
как мне написать ORDER BY FIELD('$field', 'xx', 'yy')?
На что debug($select->__toString(), 'select', TRUE); даст такой вывод:
SELECT n.nid AS nid
FROM {node} n
WHERE (n.nid IN (:db_condition_placeholder_0, :db_condition_placeholder_1,
:db_condition_placeholder_2, :db_condition_placeholder_3))
ORDER BY FIELD(n.nid, 235, 236, 234, 237) ASC
После выполнения:
$result = $select->execute()->fetchAll();
debug($result, 'result', TRUE); дает следующий вывод:
Комментарии
Здесь есть почти все примеры работы с 6кой и аналог на 7ке.
нет там
А тут?
ты вот этим чего хотел добиться?конкатенации?
где же там появляется конкатенация ?
Нигде.
Странно вообще что ТС в семерке так запросы составляет.
там тоже нет.
мне не надо конкатенации, мне надо использовать в запросе mysql выборочную сортировку и функцию FIELD(), тут написано что это такое http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field.
Поэтому вопрос, что мне написать в ->orderBy()?
А смысл такой сортировки ?
Да и ", table.title DESC" в конце запроса зачем?
Смысл этой сортировки в том что из таблицы будут полученные поля отсортированные именно в таком порядке как указано, сначала поля у которых значения SS, потом NM и тд.
table.title DESC в конце можно опустить, это не принципиально
http://api.drupal.org/api/drupal/includes!database!select.inc/function/S...
нет там этого.
ну ок, еще пояснение
orderBy($field, $direction) - это тоже самое что в запросе написать ORDER BY '$field' ASC (или DESC)
как мне написать ORDER BY FIELD('$field', 'xx', 'yy')?
$q->orderBy('t.title','desc');
$q->orderBy('t.NM','desc');
$q->orderBy('t.EX','desc');
$q->orderBy('t.VG+','desc');
$q->orderBy('t.VG','desc');
$q->orderBy('t.G','desc');
$q->orderBy('t.POOR','desc');
$q->execute();
Проверь такой код.
->fields('n', array('nid'))
->addTag('node_access')
->orderBy('FIELD(n.nid, 235, 236, 234, 237)')
->condition('n.nid', array(235, 236, 234, 237), 'IN');
На что debug($select->__toString(), 'select', TRUE); даст такой вывод:
FROM
{node} n
WHERE (n.nid IN (:db_condition_placeholder_0, :db_condition_placeholder_1,
:db_condition_placeholder_2, :db_condition_placeholder_3))
ORDER BY FIELD(n.nid, 235, 236, 234, 237) ASC
После выполнения:
debug($result, 'result', TRUE); дает следующий вывод:
(
[0] => stdClass Object
(
[nid] => 235
)
[1] => stdClass Object
(
[nid] => 236
)
[2] => stdClass Object
(
[nid] => 234
)
[3] => stdClass Object
(
[nid] => 237
)
)
Если убрать условие WHERE будет выведен весь список с нашими нодами в конце, отсортированными как указано:
(
...
[304] => stdClass Object
(
[nid] => 103
)
[305] => stdClass Object
(
[nid] => 104
)
[306] => stdClass Object
(
[nid] => 114
)
[307] => stdClass Object
(
[nid] => 235
)
[308] => stdClass Object
(
[nid] => 236
)
[309] => stdClass Object
(
[nid] => 234
)
[310] => stdClass Object
(
[nid] => 237
)
)
Это в orderBy умолчальный порядок: asc. Если его изменить на desc
наши ноды будут выведены вверху списка в обратном порядке:
(
[0] => stdClass Object
(
[nid] => 237
)
[1] => stdClass Object
(
[nid] => 234
)
[2] => stdClass Object
(
[nid] => 236
)
[3] => stdClass Object
(
[nid] => 235
)
[4] => stdClass Object
(
[nid] => 210
)
[5] => stdClass Object
(
[nid] => 211
)
...
Во-о-о-т...
вот спасибо за это