MySQL для Drupal 7 db_select - PullRequest
       6

MySQL для Drupal 7 db_select

0 голосов
/ 28 ноября 2018

Я пытаюсь выполнить следующий запрос mysql ниже с drupal 7 db_select.Но я не могу понять, как это можно сделать.Кто-нибудь может помочь мне перевести следующий запрос mysql в динамический db-запрос drupal 7?

Моя основная цель - на самом деле отсортировать результат mysql по заданной позиции строки в имени.Пожалуйста, имейте в виду, что я не хочу получать все результаты и сортировать их с помощью php, вместо этого я хочу использовать mysql для этого.Как я знаю, команда "ORDER BY LOCATE" делает это точно.

SELECT name FROM `taxonomy_term_data` WHERE LOCATE('credit', name) > 0 ORDER BY LOCATE('credit', name)

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

1.Правильный пример db_select

Возможно, используя drupal 7 db_select, вот мой пример рабочего кода (сделано с помощью этого поста )

Мой пример с таблицейcities содержащий столбец city.Найдите города с двойным «o» и отсортируйте по их позиции:

$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, которая часто устарела или слишком проста для сложных задач.

0 голосов
/ 29 ноября 2018

Я думаю, вы должны попробовать что-то вроде этого.db_like функция, кажется, делает то, что вы ищете.

$result = db_select('taxonomy_term_data', 'ttd')
  ->fields('ttd', 'name')
  ->condition('ttd.name, '%' . db_like('credit') . '%', 'LIKE')
  ->orderBy('ttd.name', 'DESC')
  ->execute();
...