Есть типы материала: "authors", "klients", "works"
Мне надо получить список всех людей по ID, Имени Фамилии, типу учетной записи, а в случае с авторами также еще и кол-ву работ
Т.е. конечная таблица должна выглядеть примерно так:
1 Иван Иванов (Клиент)
2 Петр Петров (Клиент)
4 Семен Семенов (Клиент)
5 Алексей Алексеев (Автор / 6 работ)
6 Федот Федотов (Автор / 5 работ)
* Кол-во работ указывается только для авторов (связанных в нодах "authors" через enity reference нод типа "work").
Для получения списка авторов имею такой запрос:
$query->innerJoin('node_type', 'nt', 'n.type = nt.type');
$query->innerJoin('field_data_field_name_surname', 'nms', 'n.nid = nms.entity_id');
$result = $query->FIELDS('n', array('nid', 'type', 'title'))
->FIELDS('nt', array('name'))
->orderBy('n.type', 'DESC')
->orderBy('n.title', 'ASC')
->addTag('node_access')
->range(0, $_POST['maxItems'])
->EXECUTE()->fetchAll();
Но итогом такого запроса получается такой список:
1 Иван Иванов (Клиент)
2 Петр Петров (Клиент)
4 Семен Семенов (Клиент)
5 Алексей Алексеев (Автор)
6 Федот Федотов (Автор)
Как составить запрос, чтобы результат получился такой как я привел в начале вопроса, т.е. с указанным в скобках кол-вом работ авторов?
Понимаю, что нужно копать в сторону addExpression или countQuery(), но не могу понять как сформировать такой сложный запрос.
Спасибо.
Комментарии
Запихните в тег code плиз запрос - вон, кнопочка даже есть при создании, около кнопки ютуба
И где вы кстати пытаетесь запросить кол-во работ, в какой фразе?
Прошу прощения, поправил.
А я пока нигде не пытаюсь. Мне как раз и надо в этом запросе еще и кол-во работ запросить.
А где код, как мы его так получаем то? Пробовали через PHP, а не через запрос mysql, получать кол-во работ?
Результат обрабатывается так:
<?phpforeach ($result as &$data) {
$data->nid = $data->nid;
$data->title = check_plain($data->title);
$data->name = check_plain($data->name);
}
// и отправляем результат.
drupal_json_output($result);?>
ну так делайте через php в цикле этом - доступ к типу есть, если тип authors - то запрашиваете количество. Как сделаете это на PHP и если свербит желание сделать это напрямую, без PHP - так разместите рабочий код, вам сразу напишут его аналог с прямым запросом MYSQL.
А так у вас в посте просто не хватает информации - как у вас крепятся эти посты к авторам.
а, сам $result меняем через &, ясно. Хотя конструкция сама какая то странная - надежнее из $result свой массив составить
<?php
$query = db_select('node', 'n')
->condition('n.status', 0,'>')
->condition(db_or()
->condition('n.type', 'authors')
->condition('n.type', 'klients')
);
$query->innerJoin('node_type', 'nt', 'n.type = nt.type');
$query->innerJoin('field_data_field_name_surname', 'nms', 'n.nid = nms.entity_id');
$query->fields('n', array('nid', 'type', 'title'))
->fields('nt', array('name'));
// Подставьте свой запрос который делает выборку количества работ.
$sub_query = db_select()->fields()->orderBy()->groupBy();
$query->addExpression('count(:completed_works)', 'completed_works', array(
':completed_works' => $sub_query
));
$query->orderBy('n.type', 'DESC')
->orderBy('n.title', 'ASC')
->addTag('node_access')
->range(0, $_POST['maxItems']);
$result = $query->execute()->fetchAll();
?>