ВопросОбращение к таблицам БД

Здравствуйте.
Расскажите, пожалуйста, поподробнее про связь с базами данных. Например, конкретная задача. В БД есть таблица с товарами. Надо вывести на странице сайта список товаров. Язык запросов мне знаком, на нем можно не останавливаться. Интересует имеено обращение к таблицам из Друпала и визуализация списка.
Заранее благодарю.

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

Спасибо за вопрос, давно хотел написать что-то на эту тему. Теперь есть повод :)

Запросы в друпале делаются через функцию db_query, которая выполняет запрос к базе данных. Пример (выбираем nid и заголовки у всех материалов):

$result = db_query('SELECT nid, title FROM {node}');

Далее полученное необходимо обработать. Здесь помогут три функции:
db_fetch_object - выбранные поля формируются в объект
Пример (выводит ссылки на все материалы):

$result = db_query('SELECT nid, title FROM {node}');
while ($node = db_fetch_object($result)) {
  echo l($node->title, 'node/'. $node->nid);
}

db_fetch_array - то же самое что и предыдущая функция, только выбранные поля формируются в один массив
Пример (выводит ссылки на все материалы):

$result = db_query('SELECT nid, title FROM {node}');
while ($node = db_fetch_array($result)) {
  echo l($node['title'], 'node/'. $node['nid']);
}

db_result - получает единственный результат выполнения запроса к базе:
Пример (выводит заголовок последнего материала):

$title = db_result(db_query('SELECT title FROM {node} ORDER BY created DESC LIMIT 0,1'));
echo $title;

В запросы так же можно передавать переменные. Пример выбора заголовка из 10й ноды:

$nid = 10;
$node = db_fetch_object(db_query('SELECT title FROM {node} WHERE nid = %d LIMIT 0,1', $nid));
echo $node->title;

Предыдущий пример эквивалентен следующему:

$nid = 10;
$title = db_result(db_query('SELECT title FROM {node} WHERE nid = %d LIMIT 0,1', $nid));
echo $title;

В запрос был добавлен LIMIT 0,1 исключительно для показательной оптимизации запроса (по возможности всегда добавляйте лимиты!)

Иногда так же полезной бывает функция db_last_insert_id($table, $field), которая берёт последнее записанное значение из таблицы $table поля $field.

Так же, наверное, стоит упомянуть функцию db_rewrite_sql(), которая позволяет переписывать запросы к бд, но лично я ей практически не пользуюсь.

Набора этих функций более чем достаточно для работы с базами данных :)

30.05.2011 21:05
Аватар пользователя Negromovich
Negromovich написал:

Было бы очень приятно узнать тоже самое, но относительно Drupal 7.

31.05.2011 00:01
Аватар пользователя kfc
kfc написал:

Вообще, мне непонятны такого рода вопросы и посты. Ведь нужная информация появляется при одном поисковом запросе. Плюс, конечно, друпал.орг
Статья с хабра по теме: http://habrahabr.ru/blogs/drupal/52469/
Negromovich, Drupal 7

Гораздо интереснее читать что-то из личного опыта, того что не найдёшь сразу, c чем пришлось поковыряться.

31.05.2011 12:47

Комментировать