Помогите составить SQL-запрос для вывода поля imagefield

Главные вкладки

Аватар пользователя Айдар Айдар 14 апреля 2012 в 23:34

Господа, не могу понять, как вытащить поле картинки из node_revisions, точнее, как переделать уже работающий SQL-запрос с этим делом. Вот сам запрос:

SELECT DISTINCT(n.nid), n.created, n.title FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid = 1928 AND n.type IN (" . db_placeholders($node_types, 'varchar') . ") AND n.status = 1 AND  n.created < %d AND n.language = 'ru' ORDER BY n.created DESC, n.nid DESC

Требуется как-то в него вставить поле картинки. Посмотрел, как это делает вьюс:

... node_data_field_image_news.field_image_news_fid AS node_data_field_image_news_field_image_news_fid,
node_data_field_image_news.field_image_news_list AS node_data_field_image_news_field_image_news_list,
node_data_field_image_news.field_image_news_data AS node_data_field_image_news_field_image_news_data, ...
LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid
LEFT JOIN content_type_news node_data_field_image_news ON node.vid = node_data_field_image_news.vid

Но как только ни пробовал, нифига.

Таблица самого поля в БД: content_field_news_image

Комментарии

Аватар пользователя sg85 sg85 15 апреля 2012 в 1:02

Попробую объяснить суть: если Вам нужно получить картинку из БД, берется таблица нод {node}, т.е. префикс_node если без друпал АПИ, к ней цепляется таблица поля картинки content_field_news_image по полю vid, в этой таблице идет описание картинки(Альт, и тому подобная хрень) и самое главное fid, если быть точнее, то в Вашем варианте что-то вроде field_news_image_fid, по которому уже цепляется таблица {files} через fid, где можно получить поле filepath, оно, как я понял, и нужно, с ревизиями вроде примерно тоже самое(правда они мне пока еще даром небыли нужны), только нужно в цепочку зависимостей присоединить еще {node_revisions}, если не ошибаюсь, по тому же vid.

Правда я не понял, что общего Ваш вопрос имеет с данным Вами sql запросом?

Аватар пользователя Айдар Айдар 15 апреля 2012 в 10:58

Все описанное Вами именно так и нужно. Вот только синтаксисом не владею.

"sg85" wrote:
что общего Ваш вопрос имеет с данным Вами sql запросом?

Привел запрос, к которому нужно присоединить "вытаскивание" картинки.

Аватар пользователя Айдар Айдар 15 апреля 2012 в 11:04

А лучше попробую объяснить конкретно под свои нужды:

Есть замечательный модуль Yandexnews, выводящий рсс-ку, которую подхватывает сервис Я-новостей. В модуле есть такой фрагмент кода:

<?php
function _yandexnews_getyandexnewsitems($node_types$node_count) {
  
$args array_merge($node_types, array(time()));
  
$time time();
  
$sql "SELECT DISTINCT(n.nid), n.created, n.title FROM {node} n INNER JOIN {term_node} tn ON
n.nid = tn.nid WHERE tn.tid = 1928 AND n.type IN (" 
db_placeholders($node_types'varchar') .
") AND n.status = 1 AND  n.created < %d AND n.language = 'ru' ORDER BY n.created DESC, n.nid DESC";
  
$query db_query_range(db_rewrite_sql($sql), $args0$node_count);
  while (
$node db_fetch_object($query)) {
    
$item node_load($node->nid);
    
$content .= "<item>\n";
    
$content .= "<title>" check_plain($node->title) . "</title>\n";
    
$content .= "<link>" url("node/" $node->nid, array("absolute" => TRUE)) . "</link>\n";
    
$content .= "<pdalink>" url("node/" $node->nid, array("absolute" => TRUE)) . "</pdalink>\n";
    
$content .= "<description>" check_plain(strip_tags(check_markup($item->teaser))) . "</description>\n";
//    $content .= "<author>" . check_plain($node->uid) . "</author>\n";
    
$content .= "<yandex:full-text>" check_plain(strip_tags(check_markup($item->body))) . "</yandex:full-text>\n";
    
$content .= "<pubDate>" .  date("r"$node->created) . "</pubDate>\n";
    
$content .= "</item>\n";
  }
 
  return 
$content;
}
?>

Вот и хотел к запросу прицепить картинки от типа контента (я так понимаю, второй запрос нельзя писать же отдельный?), а затем вывести это: <?php $content .= "<enclosure url($filepath, array("absolute" => TRUE))></enclosure\n"?>