Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $query = db_select('node', 'n'); -> Выбираем таблицу нод
- $query->fields('n', array('nid', 'title')); -> Из таблицы нод нам нужны поля nid и title
- $query->addExpression('COUNT(*)', 'hits');
- -> Считаем сколько нод нашлось, у которых есть тег из массива $tids, потом отсортеруем по этому параметру и получим сортировку по релевантности. (за это отвечает ниже orderBy('hits', 'DESC');)
- $query->leftJoin('taxonomy_index', 'ti', 'n.nid = ti.nid'); (обединение таблиц нод и таблицы где записаны теги нод, чтоб можно было посчитать)
- $query->condition('n.type', $vars['type']);
- $query->condition('n.status', NODE_PUBLISHED);
- $query->condition('ti.tid', $tids, 'IN');
- $query->condition('n.nid', $vars['nid'], '<>');
- -> с условиями кондишинов думаю понятно...
- $query->groupBy('n.nid');
- -> убираем дубли через groupBy по ниду, так как в объединенной таблице у нас может найтись несколько записей, которые соответствуют условиям что нид такой-то (одинаковый) и при этом же есть тег "x" или "y" или "z".... Объединяем эти записи по ниду, пох какая выберется, так как нас интересует тайтл ноды, а для этого нида достаточно.
- $query->orderBy('hits', 'DESC'); -> уже говорилось, отвечает за сортировку по "релевантности"
- $query->orderBy('n.created', 'DESC'); -> не знаю нах надо, так как сортировка есть по релевантности.
- $query->range(0, 3); -> ну и взять только 3 штучки
Add Comment
Please, Sign In to add comment