MySQL для Drupal 7 db_select
Я пытаюсь выполнить следующий запрос mysql ниже с drupal 7 db_select. Но я не могу понять, как это можно сделать. Кто-нибудь может помочь мне перевести следующий запрос mysql в динамический запрос БД drupal 7?
Моя главная цель - на самом деле отсортировать результат mysql по заданной позиции строки в имени. Пожалуйста, имейте в виду, что я не хочу получать все результаты и сортировать их с помощью php, вместо этого я хочу использовать mysql для этого. Как я знаю, команда "ORDER BY LOCATE" делает это точно.
SELECT name FROM `taxonomy_term_data` WHERE LOCATE('credit', name) > 0 ORDER BY LOCATE('credit', name)
1 ответ
1. Правильный пример db_select
Это возможно, используя drupal 7 db_select, вот мой пример рабочего кода (сделано с помощью этого поста)
Мой пример в с таблицей cities
содержащий столбец city
, Найти города с двойным "о" и отсортировать по их позиции:
$r = db_select('cities', 't')
->fields('t')
->condition('t.city', '%' . db_like('oo') . '%', 'LIKE');
$r->addExpression("LOCATE('oo', city) ", 'loc');
$r = $r->orderBy('loc', 'DESC')
->execute()
->fetchAllAssoc("id");
Так похоже в вашем примере будет:
$r = db_select('taxonomy_term_data', 't')
->fields('t')
->condition('t.name', '%' . db_like('credit') . '%', 'LIKE');
$r->addExpression("LOCATE('credit', name) ", 'loc');
$r = $r->orderBy('loc', 'DESC'); //Or ASC
//Execute your query and gather result anyway you want.
2. Вам нужно использовать db_select?
Как кто-то заявил в комментарии в ссылке, я написал: "Есть время и места, чтобы просто использовать db_query".
Я думаю, что это время:) Не переусердствуйте в своем коде, просто используя логику drupal-way, которая часто устарела или слишком проста для сложных задач.
Я думаю, вы должны попробовать что-то вроде этого. db_like
Функция, кажется, делает то, что вы ищете.
$result = db_select('taxonomy_term_data', 'ttd')
->fields('ttd', 'name')
->condition('ttd.name, '%' . db_like('credit') . '%', 'LIKE')
->orderBy('ttd.name', 'DESC')
->execute();