Помогите составить запрос к базе [Решено]

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

Аватар пользователя RankVert RankVert 25 февраля 2014 в 15:46

Добрый день!

Помогите, пожалуйста, составить запрос к базе со следующими условиями:

Есть тип нод (назовем его "text"). У этого типа нод есть поле ("image").
Нужно вывести общее КОЛИЧЕСТВО нод (циферкой), в которых это поле НЕ заполнено.

Буду благодарен за помощь в решении проблемы.

Комментарии

Аватар пользователя RankVert RankVert 25 февраля 2014 в 16:01

Я изучал эти функции и сделал уже очень много попыток написать нужный мне запрос( Но я совсем не селен в php и drupal. Помогаю хорошим людям вернуть к жизни небольшой сайт. Больше не у кого спросить, поэтому прошу помощи. Не думаю, что людям, которые знают php, это очень сложно.

Аватар пользователя RankVert RankVert 25 февраля 2014 в 16:17

Например, вывести количество определенных нод у меня получается, но как дописать условие, что нужны только те ноды, у которых определенное значение у конкретного поля - я не могу понять(

Аватар пользователя sergeybelya sergeybelya 25 февраля 2014 в 16:19

RankVert wrote:
Например, вывести количество определенных нод у меня получается, но как дописать условие, что нужны только те ноды, у которых определенное значение у конкретного поля - я не могу понять(

Вам нужно использовать метод innerJoin для подключения к таблице с полем

Аватар пользователя RankVert RankVert 25 февраля 2014 в 16:57

<?php print db_query("SELECT count(*) FROM node WHERE type = 'text' AND status = 1
INNER JOIN {field_data_field_tags}...?>

Это очень сложно сделать, если ты совсем не знаком с синтаксисом. И совсем-совсем не понятно как поставить условие, что поле должно НЕ содержать что-то.

Пожалуйста, помогите примером нубу!

Аватар пользователя drupby drupby 25 февраля 2014 в 18:19

вот SQL запрос -его надо обернуть только в db_select или db_query

SELECT COUNT(node.nid)
FROM
node node
LEFT JOIN field_data_field_image field_data_field_image ON node.nid = field_data_field_image.entity_id AND (field_data_field_image.entity_type = 'node' AND field_data_field_image.deleted = '0')
WHERE (( (node.status = '1') AND (node.type IN  ('article')) AND (field_data_field_image.field_image_fid IS NULL ) ))

как то так

$query = db_select('node', 'n');
$query->leftJoin('field_data_field_image', 'field_data_field_image', 'field_data_field_image.entity_id = n.nid');
//$query->condition('n.type', 'article');
$query->isNull('field_data_field_image.field_image_fid');
$count = $query->countQuery()->execute()->fetchField();