Выборка с условием:
// Drupal 6
$nodes = db_query("
SELECT nid, title
FROM {node}
WHERE type = '%s' AND uid = %d
", 'page', 1);
// Drupal 7, static query
$nodes = db_query("
SELECT nid, title
FROM {node}
WHERE type = :type AND uid = :uid
", array(':type' => 'page', ':uid' => 1))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'page') // <--
->condition('n.uid', 1) // <--
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node_field_data', 'n')
->fields('n', ['nid', 'title'])
->condition('n.type', 'page') // <--
->condition('n.uid', 1) // <--
->execute()
->fetchAll();
Выборка из двух таблиц соединённых с помощью INNER JOIN:
// Drupal 6
$nodes = db_query("
SELECT n.title, u.name
FROM {node} n
INNER JOIN {users} u ON n.uid = u.uid
");
// Drupal 7, static query
$nodes = db_query("
SELECT n.title, u.name
FROM {node} n
INNER JOIN {users} u ON n.uid = u.uid
")->fetchAll();
// Drupal 7, dynamic query
$query = db_select('node', 'n');
$query->innerJoin('users', 'u', 'n.uid = u.uid'); // <--
$query->fields('n', array('title'));
$query->fields('u', array('name'));
$nodes = $query->execute()->fetchAll();
// Drupal 8+
$query = \Drupal::database()->select('node_field_data', 'n');
$query->innerJoin('users_field_data', 'u', 'n.uid = u.uid'); // <--
$query->fields('n', ['title']);
$query->fields('u', ['name']);
$nodes = $query->execute()->fetchAll();
Следует помнить, что некоторые методы (например джоины) не возвращают объект SelectQuery, и поэтому их нельзя использовать в цепочке вызовов вроде db_select()->method1()->innerJoin()->method2()
.
Получить значение поля у единственной записи:
// Drupal 6
$title = db_result(db_query("
SELECT title
FROM {node}
WHERE nid = %d
", 123));
// Drupal 7, static query
$title = db_query("
SELECT title
FROM {node}
WHERE nid = :nid
", array(':nid' => 123))->fetchField();
// Drupal 7, dynamic query
$title = db_select('node', 'n')
->fields('n', array('title'))
->condition('n.nid', 123)
->execute()
->fetchField(); // <--
// Drupal 8+
$title = \Drupal::database()
->select('node_field_data', 'n')
->fields('n', ['title'])
->condition('n.nid', 123)
->execute()
->fetchField(); // <--
Получить объект по его id:
// Drupal 6
$node = db_fetch_object(db_query("
SELECT *
FROM {node}
WHERE nid = %d
", 123));
// Drupal 7, static query
$node = db_query("
SELECT *
FROM {node}
WHERE nid = :nid
", array(':nid' => 123))->fetchObject();
// Drupal 7, dynamic query
$node = db_select('node', 'n')
->fields('n')
->condition('n.nid', 123)
->execute()
->fetchObject(); // <--
// Drupal 8+
$node = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->condition('n.nid', 123)
->execute()
->fetchObject(); // <--
Посчитать число записей:
// Drupal 6
$count = db_result(db_query("
SELECT COUNT(*)
FROM {node} n
WHERE n.uid = 1
"));
// Drupal 7, static query
$count = db_query("
SELECT COUNT(*)
FROM {node} n
WHERE n.uid = 1
")->fetchField();
// Drupal 7, dynamic query, вариант 1
$count = db_select('node', 'n')
->condition('n.uid', 1)
->countQuery() // <--
->execute()
->fetchField();
// Drupal 7, dynamic query, вариант 2
$query = db_select('node');
$query->addExpression('COUNT(*)'); // <--
$count = $query->execute()->fetchField();
// Drupal 8+, вариант 1
$count = \Drupal::database()
->select('node_field_data', 'n')
->condition('n.uid', 1)
->countQuery() // <--
->execute()
->fetchField();
// Drupal 8+, вариант 2
$query = \Drupal::database()->select('node_field_data');
$query->addExpression('COUNT(*)'); // <--
$count = $query->execute()->fetchField();
Найти минимальное значение:
// Drupal 6
$min = db_result(db_query("SELECT MIN(fieldname) FROM {tablename}"));
// Drupal 7, static query
$min = db_query("SELECT MIN(fieldname) FROM {tablename}")->fetchField();
// Drupal 7, dynamic query
$query = db_select('tablename');
$query->addExpression('MIN(fieldname)'); // <--
$min = $query->execute()->fetchField();
// Drupal 8+
$query = \Drupal::database()->select('tablename');
$query->addExpression('MIN(fieldname)'); // <--
$min = $query->execute()->fetchField();
Выбрать определённое количество записей:
// Drupal 6
$nodes = db_query("SELECT * FROM {node} LIMIT 0, 10");
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} LIMIT 0, 10")->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->range(0, 10) // <--
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->range(0, 10) // <--
->execute()
->fetchAll();
Обойти записи:
// Drupal 6
$nodes = db_query("SELECT * FROM {node}");
while ($node = db_fetch_object($nodes)) {
$items[] = $node->title;
}
// Drupal 7, static query
$result = db_query("SELECT * FROM {node}");
foreach ($result as $node) {
$items[] = $node->title;
}
// Drupal 7, dynamic query
$result = db_select('node', 'n')->fields('n')->execute();
foreach ($result as $row) {
$items[] = $row->title;
}
// Drupal 8+
$result = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->execute();
foreach ($result as $row) {
$items[] = $row->title;
}
Обновление записи:
// Drupal 6
db_query("UPDATE {node} SET status = %d WHERE nid = %d", 1, 123);
// Drupal 7, static query
db_query("
UPDATE {node}
SET status = :status
WHERE nid = :nid
", array(':status' => 1, ':nid' => 123));
// Drupal 7, dynamic query
db_update('node')
->fields(array('status' => 1))
->condition('nid', 123)
->execute();
// Drupal 8+
\Drupal::database()
->update('node_field_data')
->fields(['status' => 1])
->condition('nid', 123)
->execute();
Инкремент значения поля:
// Drupal 6
db_query("
UPDATE {node_counter}
SET totalcount = totalcount + 1
WHERE nid = %d
", 123);
// Drupal 7, static query
db_query("
UPDATE {node_counter}
SET totalcount = totalcount + 1
WHERE nid = :nid
", array(':nid' => 123));
// Drupal 7, dynamic query
db_update('node_counter')
->expression('totalcount', 'totalcount + 1')
->condition('nid', 123)
->execute();
// Drupal 8+
\Drupal::database()
->update('node_counter')
->expression('totalcount', 'totalcount + 1')
->condition('nid', 123)
->execute();
Удаление записи:
// Drupal 6
db_query("
DELETE FROM {node}
WHERE uid = %d AND created < %d
", 1, time() - 3600);
// Drupal 7, static query
db_query("
DELETE FROM {node}
WHERE uid = :uid AND created < :created
", array(':uid' => 1, ':created' => time() - 3600));
// Drupal 7, dynamic query
db_delete('node')
->condition('uid', 1)
->condition('created', time() - 3600, '<')
->execute();
// Drupal 8+
\Drupal::database()
->delete('node_field_data')
->condition('uid', 1)
->condition('created', time() - 3600, '<')
->execute();
Очистка таблицы (удаление всех данных из таблицы):
// Drupal 6, Drupal 7 static query
db_query("TRUNCATE {watchdog}");
// Drupal 7, dynamic query
db_truncate('watchdog')->execute();
// Drupal 8+
\Drupal::database()->truncate('watchdog')->execute();
Добавление записи:
// Drupal 6
db_query("
INSERT INTO {mytable} (intvar, stringvar, floatvar)
VALUES (%d, '%s', %f)
", 5, 'hello world', 3.14);
$id = db_last_insert_id();
// Drupal 7, dynamic query
$id = db_insert('mytable')
->fields(array(
'intvar' => 5,
'stringvar' => 'hello world',
'floatvar' => 3.14,
))
->execute();
// Drupal 8+
$id = \Drupal::database()
->insert('mytable')
->fields([
'intvar' => 5,
'stringvar' => 'hello world',
'floatvar' => 3.14,
])
->execute();
Использование логического оператора OR в условии:
// Drupal 6
$nodes = db_query("
SELECT *
FROM {node}
WHERE type = 'page' AND (uid = %d OR status = %d)
", 1, 0);
// Drupal 7, static query
$nodes = db_query("
SELECT *
FROM {node}
WHERE type = 'page' AND (uid = :uid OR status = :status)
", array(':uid' => 1, ':status' => 0))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.type', 'page')
->condition(
db_or()
->condition('n.uid', 1)
->condition('n.status', 0)
)
->execute()
->fetchAll();
// Drupal 8+
$query = \Drupal::database()
->select('node_field_data', 'n');
->fields('n')
->condition('n.type', 'page');
$or_conditions = $query->orConditionGroup();
$or_conditions->condition('n.uid', 1);
$or_conditions->condition('n.status', 0);
$query->condition($or_conditions);
Использование оператора IN в условии:
$nids = array(1, 2, 3);
// Drupal 6
$nodes = db_query("
SELECT *
FROM {node}
WHERE nid IN (" . db_placeholders($nids) . ")
", $nids);
// Drupal 7, static query
$nodes = db_query("
SELECT *
FROM {node}
WHERE nid IN (:nids)
", array(':nids' => $nids))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.nid', $nids, 'IN')
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->condition('n.nid', $nids, 'IN')
->execute()
->fetchAll();
Использование оператора LIKE в условии:
// Drupal 6
$nodes = db_query("
SELECT *
FROM {node}
WHERE title LIKE '%%%s%%'
", 'substring');
// Drupal 7, static query
$nodes = db_query("
SELECT *
FROM {node}
WHERE title LIKE :title
", array(':title' => '%' . db_like('substring') . '%'))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.title', '%' . db_like('substring') . '%', 'LIKE')
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->condition('n.title', '%' . \Drupal::database()->escapeLike('substring') . '%', 'LIKE')
->execute()
->fetchAll();
Использование оператора BETWEEN в условии:
// Drupal 6
$nodes = db_query("
SELECT *
FROM {node}
WHERE nid BETWEEN %d AND %d
", 123, 456);
// Drupal 7, static query
$nodes = db_query("
SELECT *
FROM {node}
WHERE nid BETWEEN :nid1 AND :nid2
", array(':nid1' => 123, ':nid2' => 456))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.nid', array(123, 456), 'BETWEEN')
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node', 'n')
->fields('n')
->condition('n.nid', [123, 456], 'BETWEEN')
->execute()
->fetchAll();
Проверка значения на NULL:
// Drupal 6, Drupal 7 static query
$result = db_query("SELECT * FROM {tablename} WHERE fieldname IS NULL");
// Drupal 7, dynamic query, вариант 1
$result = db_select('tablename', 't')
->fields('t')
->condition('t.fieldname', NULL, 'IS NULL')
->execute();
// Drupal 7, dynamic query, вариант 2
$result = db_select('tablename', 't')
->fields('t')
->isNull('t.fieldname')
->execute();
// Drupal 8+
$result = \Drupal::database()
->select('tablename', 't')
->fields('t')
->isNull('t.fieldname')
->execute();
Сложные условия в WHERE:
// Drupal 6
$nodes = db_query("
SELECT *
FROM {node}
WHERE YEAR(FROM_UNIXTIME(created)) = %d
", 2011);
// Drupal 7, static query
$nodes = db_query("
SELECT *
FROM {node}
WHERE YEAR(FROM_UNIXTIME(created)) = :created
", array(':created' => 2011))->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->where('YEAR(FROM_UNIXTIME(n.created)) = :created', array(':created' => 2011))
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->where('YEAR(FROM_UNIXTIME(n.created)) = :created', [':created' => 2011])
->execute()
->fetchAll();
Сортировка:
// Drupal 6
$nodes = db_query("
SELECT *
FROM {node}
ORDER BY created DESC, title ASC
");
// Drupal 7, static query
$nodes = db_query("
SELECT *
FROM {node}
ORDER BY created DESC, title ASC
")->fetchAll();
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
->fields('n')
->orderBy('n.created', 'DESC')
->orderBy('n.title', 'ASC')
->execute()
->fetchAll();
// Drupal 8+
$nodes = \Drupal::database()
->select('node_field_data', 'n')
->fields('n')
->orderBy('n.created', 'DESC')
->orderBy('n.title', 'ASC')
->execute()
->fetchAll();
Получить результаты запроса в виде двумерного ассоциативного массива:
// Drupal 6
$result = db_query("SELECT nid, title, created FROM {node}");
$nodes = array();
while ($row = db_fetch_object($result)) {
$nodes[$row->nid] = $row;
}
// Drupal 7, static query
$nids = db_query("SELECT nid, title, created FROM {node}")->fetchAllAssoc('nid');
// Drupal 7, dynamic query
$nids = db_select('node', 'n')
->fields('n', array('nid', 'title', 'created'))
->execute()
->fetchAllAssoc('nid');
// Drupal 8+
$nids = \Drupal::database()
->select('node_field_data', 'n')
->fields('n', ['nid', 'title', 'created'])
->execute()
->fetchAllAssoc('nid');
Получить одну колонку из таблицы в виде простого одномерного массива:
// Drupal 6
$result = db_query("SELECT nid FROM {node}");
$nids = array();
while ($row = db_fetch_object($result)) {
$nids[] = $row->nid;
}
// Drupal 7, static query
$nids = db_query("SELECT nid FROM {node}")->fetchCol();
// Drupal 7, dynamic query
$nids = db_select('node', 'n')
->fields('n', array('nid'))
->execute()
->fetchCol();
// Drupal 8+
$nids = \Drupal::database()
->select('node', 'n')
->fields('n', ['nid'])
->execute()
->fetchCol();
Получить одномерный ассоциативный массив, где ключами будет первая колонка запроса, а значениями — вторая:
// Drupal 6
$result = db_query("SELECT nid, title FROM {node}");
$titles = array();
while ($row = db_fetch_object($result)) {
$nids[$row->nid] = $row->title;
}
// Drupal 7, static query
$titles = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed();
// Drupal 7, dynamic query
$titles = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->execute()
->fetchAllKeyed();
// Drupal 8+
$titles = \Drupal::database()
->select('node_field_data', 'n')
->fields('n', ['nid', 'title'])
->execute()
->fetchAllKeyed();
Полный мануал с кучей примеров есть на официальном сайте — Database API.
- Views сортировка по выражению/условию/формуле
- Views фильтр "товар имеет опубликованную вариацию"
- Модуль EAV Field — хранение большого числа характеристик сущности в одном поле
- Добавить сторонней контент сущности своё базовое поле (base field)
- Вывести дефолтное значение элемента формы с помощью #lazy_builder
Комментарии
кавычки не влияют на результат
Попробуйте. Еще как влияют
С кавычками он ищет последовательность:
1,11,12,2
Без кавычек:
1,2,11,12
Решение найдено:
Помоги пожалуйста реализовать условие для выполнения condition:
1. если в leftJoin были подключены null значения, то должна срабатывать только condition №1
2. если в leftJoin были подключены не null значения, то должна срабатывать только condition №2.
Проблема в том, что сейчас condition срабатывают вместе.
рабрался:
Можете помощь мне разобраться с заданием которые дали мне на новым работе. Мне дали таблицу в Word формате и сказали перевести это на Веб страницу которые преподаватели могли заполнят формы и так в таблице(как Word таблицы) вывести результат. Я создал страницы которые можно заполнять информация ми (с помощи Webform). Но я не могу вывести результат как мне хотелось. Тогда я спросил как можно повлиять на выведенное данных. Они сказали с помощи База данных, но я не могу как это понят потому что у меня нет понятие как и где писать SQL Query? , но у меня есть роль админа. Можете помочь мне, просто хочу сдать задание вовремя и делать хорошо как они дали. Только не пинайте сильно, недавно начал разбираться в друпале . Спасибо я буду ждать и искать пока не сделаю это.
читайте про модуль views
Спасибо, сайт создан на Drupal 6, есть отличи в views
Скажите пожалуйста, а существует ли на данном этапе способ принудительно задавать порядок выводимых полей в запросе ?
А то, как я заметил, сначала будут выводиться именно поля (созданные с помощью addField), а потом - выражения (addExpression), даже если при построении query вызывать эти функции вразнобой.
Просто если не задавать порядок полей принудительно, то могут быть проблемы при построении UNION - запросов.
Всем привет!
Использую вот такой снипет для вывода определенного типа материала
сайт двуязычный а он выводит все подряд тоесть по очередности создания материала подскажите пожалуйста как сделать чтобы вывод зависил от языка
Добрый день!
есть таблица "план", есть таблица "пользователи"
подскажите, пожалуйста, как запомнить значение (имя пользователя), выбранное в select и вставить не само значение, а его id из таблицы "пользователи" в таблицу "план".
то, что ниже, явно не верно, но, быть может, я близок?
<?php
function my_database_insert_form_submit($form, &$form_state) {
$bid = variable_set('u_name',$form_state['values']['u_name']);
$q11 = db_select('user', 'u');
$q11->fields('u',array('id_user'));
$q11->condition('u.u_name', $bid);
/** $q11->where('u.u_name= :created', array(':created' => $bid));*/
$res11=$q11->execute();
$query = db_insert('plan');
$query->fields(array(
'id_user' => $bid,
'id_subject' => $form_state['values']['id_subject'],
'term' => $form_state['values']['term'],
'gl_name' => $form_state['values']['gl_name'],
'lecture' => $form_state['values']['lecture'],
'practice' => $form_state['values']['practice'],
'lab_plan' => $form_state['values']['lab_plan'],
'lab_all' => $form_state['values']['lab_all'],
'consult' => $form_state['values']['consult'],
'exam' => $form_state['values']['exam'],
'test' => $form_state['values']['test'],
'control' => $form_state['values']['control'],
'course' => $form_state['values']['course'],
'gac' => $form_state['values']['gac'],
'diplom' => $form_state['values']['diplom'],
));
$query ->execute();
if ($query > 0) {
drupal_set_message(t('Data has been successfully sent.'));
}
else {
drupal_set_message(t("Data hasn't been sent."), 'error');
}
}
?>
подскажите как добавить оператор REGEXP в db_select()?
addExpression(...)
Наверное надо уточнить что удаление записей (delete, truncate) должно делаться в увязке с другими таблицами
Добрый день. Прими мою благодарность за твои познавательные статьи.
И конечно же вопрос (как без него). Как приджоинить таблицу внешней БД? Гипотетический пример:
Конечно можно прописать вместо other_table что-то типа other_db.other_table, но при смене БД начнется волокита по корректировке всего кода.
Хочу получить массив из такой таблицы (flag c полями)
entity_id | delta | field_competence_tid
5 | 0 | 1
6 | 0 | 1
6 | 1 | 2
затирается одна строка там где ключи совпадают
как получить
array(
'entity_id' => array(
'delta' => 'field_competence_tid',
'delta' => 'field_competence_tid',
'delta' => 'field_competence_tid',
),
'entity_id' => array(
'delta' => 'field_competence_tid',
'delta' => 'field_competence_tid',
'delta' => 'field_competence_tid',
),
....
->fetchAll(); cделал
после перелапачу как надо
xandeadx, подскажи, а как красиво плейсхолдер для полей использовать?
Как такой запрос переделать?
Если сделать так:
Получим всего лишь:
В ООП стиле-то понятно:
Но хочется в коде видеть привычный sql-запрос (для собственных внешних данных)
Добрый день.
Вы случайно не сталкивались с такой проблемой, как то, что orderBy не сортирует, как нужно ?
есть функция по запросу к базе данных из модуля "рефералс":
http://pastebin.com/Sq7k1jAJ
надо переделать так чтобы она брала не только referral_uid и с него вытаскивала uid, а чтобы потом подставляла этот uid вместо первоначального referral_uid и процесс повторялся - находя количество рефералов второго уровня, есть проблемы в знаниях БД - по-этому возникаем проблема при апгрейде кода... или не выдает никакой инфы, или выдает ошибку на странице((
да, буду очень благодарен за помощь))
Добрый день! Подскажите, как сделать сортировку, при условии?
Например у комментов есть два поля c.cid и c.pid
c.cid - номер комента
c.pid - уровень комментария (номер комментария к которому был дан ответ)
Сортировка по обоим дает не тот результат:
$query->orderBy('c.cid', 'DESC')
->orderBy('c.pid', 'DESC');
Как правильно сделать сортировку, чтобы сохранялась вложенность комментариев?
http://cgit.drupalcode.org/drupal/tree/modules/comment/comment.module?h…
А нет ли более простого способа изменить порядок сортировки комментариев (на DESC) сохранив их вложенность?
не в курсе
Нашел более простой способ: https://www.drupal.org/project/comment_goodness :)
В настройках материала можно изменить порядок сортировки. Или клонировать функцию предложенную xandeadx'ом изменив под свои нужды.
Без приведенного выше модуля, в материале нет настроек сортировки комментариев.
Точно. Посмотрел, у меня https://www.drupal.org/project/sort_comments стоит. Он еще dev. Попробую Comment goodness. Благодарю!
Здравствуйте Xandeadx,
Как в callbaсk сделать вывод терминов и заголовки нод.
Подскажите, пожалуйста, а можно ли сделать выборку нод на основе сравнения значений полей?
Например, у нод есть два поля, первое уникальный идентификатор, второй список идентификаторов(как бы идентификаторы нод референсов), нужно взять все значения второго поля и вывести все ноды у которых идентификатор сходится со значением первого поля
да, с помощью оператора IN
Здравствуйте. А подскажите, есть ли такой запрос к базе, благодаря которому можно проверить содержимое страниц на дублирование среди других страниц сайта? То есть надо провести выборку с условием идентичных field_body на страницах. Спасибо.
Подскажите плз, как через db_update сделать такое:
UPDATE table SET field1 = func(field2) WHERE field3 LIKE 'value%'
где func() - некая функция MySQL?
Очень полезная статья. Не раз обращаюсь к ней. Благодарю вас, xandeadx.
Подскажите пож-та, как через dynamic query сделать COUNT(*), как в 10 строке в Drupal 7?
Здравствуйте, xandeadx!
Спасибо за полезную статью.
Столкнулся с проблемой выбора нод по ролям пользователей:
Запрос
выдаёт ошбку
Integrity constraint violation: 1052 Column 'created' in where clause is ambiguous,
что ему не нравится? Заранее благодарю
Можно ли в одном запросе вернуть промежуточное и итоговое значение.
Например:
В запросе мне нужно подсчитать общее количество нод (результат на вывод) и нод с определенным типом (например article).
Или все-таки нужно отправлять два почти одинаковых запроса?
нельзя
А нет ли функции аналогичной fetchObject, но чтобы выводило не объект, а массив с ключами - названиями полей?
fetchAssoc
Спасибо. Зря в текст не добавите fetchAssoc - не такое очевидное название, как кажется.
Я честно признаюсь что я тупой...
я не могу понять как сделать этот запрос на 7ку
-- Генерирует UUID для уже существующих пользователей
максимум что у меня получилось вообще не то что надо но хотя бы заработало...
надо чтобы модуль rules при сохранении(регистрации) пользователя выполнял генерацию uuid. мозг кипит, тонны материала перелопачены и я не профи в работе с кодом, поэтому прошу помощи.
капут, как всё оказывается просто...
я делал по примеру и видимо реально я тупой хДДД
теперь понятно где я косяк!
Спасибо большое за статью. Даже в 2016 году иногда пользуюсь как доступной шпаргалкой.
Статья на вес золота!
Я немножко упорот, но возможно ли с помощью dynamic query сделать что-то типа:
Такой код конечно выдаст синтаксис эррор, но думаю идея ясна, возможно ли динамическое формирование условия?
Или только конкантенация строк?
https://api.drupal.org/comment/21264#comment-21264
xandeadx, спасибо, то что нужно!
Стыд и позор мне раз сам не глянул в комменты db_or()
Может кому пригодится.
Для подсчёта общего количества вариантов в запросе с ограничением на выдачу
$count = $query->countQuery()->execute()->fetchField();
Вставьте перед $query->range. Этот подсчёт не испортит общего запроса и выдаст общее количество вариантов.
Есть таблица, нужно оттуда выбрать два цифровых поля n1 и t1, оба поля неуникальны. Возможно ли так написать запрос через drupal Api, чтобы получить на выходе массив, ключами которого будут уникальные значения первого поля, а значениями - одномерный массив из ключей второго поля?
->fetchAll(PDO::FETCH_COLUMN | PDO::FETCH_GROUP)
Вот бы ещё знать, что подставить вместо PDO::FETCH_COLUMN и PDO::FETCH_GROUP
Сейчас запрос выглядит так
Потом я пробегаюсь по полученному и переформатирую.
Как я понимаю нужно группировать по какому то полю?
Ничего не надо подставлять, это константы.
Да, подошло к первоначальным условиям, когда ещё не было vid - спасибо.
Господа, подскажите, плз, в чем может быть дело?
8 друпал. Код простейший:
Поле a.active - tinyint
При выполнении запроса вылетает ошибка:
То есть почему-то в WHERE "1" подставляется как строка, в кавычках, и, естественно, запрос грохается. Почему так? Как добиться, чтобы она вставлялась нормально, как число, без кавычек?
Помогите, пожалуйста.
Друпал 7.
Скажите, корректен ли такой код:
Мне хотелось отобрать записи по определеному полю таксономии.
В condition первым параметром указывается имя колонки, знак операции в третьем.
В fields второй параметр должен быть массивом.
foreach надо делать по результату запроса, а не по объекту запроса.
В foreach у вас не будет ни id, ни name, потому что ничего этого вы не выбрали в запросе.
В общем читайте всё сначала.
Огромное спасибо за ответ.
У меня все получилось, с учетом ваших замечаний
Подскажите, пожалуйста. (друпал 7)
Нужно:
Определить ноды в словаре с id = 6
Для каждого термина узнать название и количество нод в нем.
Но при условии, что эти ноды типа student_note, а также значение года в поле field_date_beginning_value должно соответствовать текущему году и значение поля field_finished_value должно быть равно 1.
$query = db_select('taxonomy_index', 't');
$query->innerJoin('taxonomy_term_data', 'd', 't.tid = d.tid');
$query->leftJoin('taxonomy_vocabulary', 'v', 'd.vid = v.vid');
$query->leftJoin('node', 'n', 't.nid = n.nid');
$query->leftJoin('field_data_field_date_beginning', 'b', 'b.entity_id = n.nid');
$query->leftJoin('field_data_field_finished', 'f', 'f.entity_id = n.nid');
$query->condition('v.vid', 6);
$query->condition('n.type', 'student_note');
$query->condition('f.field_finished_value', '1');
$query->fields('t', array('nid', 'tid'))
->fields('d', array('vid', 'name'))
->fields('v', array('vid'))
->fields('n', array('nid'))
->fields('f', array('entity_id'))
->where('YEAR(FROM_UNIXTIME(b.field_date_beginning_value)) = :field_date_beginning_value', array(':field_date_beginning_value' => date("Y")))
->groupBy('tid');
$query->addExpression('COUNT(nid)', 'countnode');
$nodes = $query->execute()->fetchAll();
Как можно исправить?
Что исправить?
Здравствуйте!
В таком варианте запрос работает:
$query = db_select('taxonomy_index', 't');
$query->innerJoin('taxonomy_term_data', 'd', 't.tid = d.tid');
$query->leftJoin('taxonomy_vocabulary', 'v', 'd.vid = v.vid');
$query->condition('v.vid', 6);
$query->fields('t', array('nid', 'tid'))
->fields('d', array('vid', 'name'))
->fields('v', array('vid'))
->groupBy('tid');
$query->addExpression('COUNT(nid)', 'countnode');
мне его нужно еще доработать, чтобы запрос работал для конкретных нод типа student_note, значение года в поле field_date_beginning_value должно соответствовать текущему году и значение поля field_finished_value должно быть равно 1.
$nid= db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.title', 'abracadabra')
->execute()
->fetchField();
Эта конструкция выдаcт первую попавшуюся на пути запись. Как сделать так, чтобы выдавала последнюю?
добавить сортировку наверное
Здравствуйте.
Как отменить ранее установленное условие?
->condition('n.nid', 123)
Так там числовые индексы? И у меня в зависимости от раздела, нужный фильтр находится под случайным индексом. Нет ли специального метода, который по имени поля ансетит?
нет
Подскажите, а как найти слово с апострофом в базе по слову без него?
$query->condition('my.field', '%' . db_like($val) . '%', 'LIKE');
Как тут прописать?
Т.е. нужно найти в базе O'STIN, по слову OSTIN.
Тока не удаляйте эту страницу ещё лет 10.
Подглядываю сюда уже лет 10. Подглядывал, подглядываю и буду подглядывать.
Привет :) Может комменты отсортировать чтобы последние были первыми?
Решил проитать что народ пишет, а в начале 2012 год про пиХАпи 5 )))))))))
Ошибся в пред. комменте - 2010 год в начале.
Чуть поправить в "Получить значение поля у единственной записи:"
$title = \Drupal::database('node_field_data', 'n')
$title = \Drupal::database()->select('node_field_data', 'n')
А из SQL Views можно получить выборку?
Как зделать выборку по uid?
db_insert('users')
->fields(array('balance'))
->values(array(
'balance' => $balance,
))
->execute();
Найти минимальное значение:
В Drupal 9 эта строка дает ошибку
$query->addExpression('MIN(fieldname)'); // <--
А вот так работает
$query->addExpression('MIN("fieldname")', 'fieldname');
Добавить комментарий