Guest User

Untitled

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