Задача такова: в бд есть две таблицы: одна - comment, другая - users, нужно в модуле прописать код, который вычисляет количество комментарий пользователя. Имя пользователя вводится с формы
Подскажите, как найти список всех публикаций (комментариев) пользователя?
какого именно пользователя? где будет выводиться список? что из себя должен представлять список - просто список ссылок на страницы нод, комментов или что то сложнее?
"kosHta" wrote:
"Виктория" написал(а):
как найти
"Виктория" написал(а):
сделать
вначале сделать, а потом искать то, что наделал)))
У меня свой конкретный модуль) но нужна помощь в этом вопросе
Помощь конкретно в чем : в составлении запросов или в обработке результатов выполнения запросов? Или не знаете как создать страницу и вывести там форму и список ссылок под ней ?
Да хоть какое-нибудь представление. мне нужно использовать две таблицы в запросе, потому что вводится имя пользователя и по этому имени нужно найти его комменты. на выходе должна получится таблица с данными пользователя, где помимо основных данных,есть еще и столбец со списком комментов. таблица с основными у меня выводится, а вот как к ней добавить столбец где будут комменты не знаю, прошу помочь
Но здесь я работаю только с одной таблицей. А мне нужно привязать еще одну, где хранятся комменты пользователей, чтобы данные из нее тоже вывести в этой таблице
Я так понимаю, должно получится что-то в виде этого:
$query = db_select('users','t');// Запрос к БД
$query->join('comment', 'c', 't.uid = c.uid');
$query->groupBy('c.uid');
$query->fields('t', array('uid','name','mail','grup'))
->condition('t.name',$names) //Условие выборки
->fields('c', array('name'));
$result = $query->execute();
у текстового поля есть свойство autocomplete_path, которое позволяет заполнятся полю автоматически, то есть в поле будет записан тот пользователь, который точно есть.
Когда была просто таблица, берущая данные только из users, все выводилось стандартной темизацией. Сейчас вроде все также делаем, а таблица пустая выходит
В том, что код рабочий - не сомневаюсь. Я пробовала выводить результат операции join массивом, получилось, а вот чтобы вывести в таблицу, почему-то не выходит. Не пойму, в чем ошибка
Надо себе завести бабский акк для тупых вопросов))))
Вот мы тебя и рассекретили , привет, Виктория. А то на MongoDB он перешел, а тут элементарную выборку с одним джоином не может сделать , прикидывается девочкой беспомощной.Я бы на твоем месте аватарку только поменял , а то слишком неправдоподобный мульт получился.Да и сразу же заметно - Виктория пропала , а ХулиGUN появился , палишся по-детски.
Что за ужас вы тут устроили?? Я обычная девушка, студентка, которая учится работать с друпалом и обратилась сюда за помощью. Фото было не мое, а первое попавшееся в интернете, т.к. не хотела выкладывать личное фото, а вы тут раздули. Вот моя ссылка вк http://vk.com/vikbelec1. Так что прекращайте этот непонятный диалог. Мне от этого сообщества нужна было помощь, а не то что здесь происходит.
Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.
Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.
Вам пытаются объяснить.
Дело не в коде, дело в ваших данных.
Что с ними не так - только вам известно.
Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.
Вам пытаются объяснить.
Дело не в коде, дело в ваших данных.
Что с ними не так - только вам известно.
P.S. Кто-нить заметил филд grup в users?
grup в таблице users действительно есть, я сама туда эти данные добавила
Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.
Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.
Ну и какой отсюда вывод может быть?
У вас неверное условие для джойна, не отвечающее данным.
А скорее всего у вас тупо пусто в вашей переменной $names
Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.
Ну и какой отсюда вывод может быть?
У вас неверное условие для джойна, не отвечающее данным.
А скорее всего у вас тупо пусто в вашей переменной $names
Нет, там вводится конкрентное значение. И с этим значением я работаю, ведь таблица с данными из users выводится, а она прежде всего использует значение names. Код выборки, я думаю, верный, другого варианта пока не вижу. Но во как вывести результат в ту же таблицу...
А таблица пустая, потому что просто у данного пользователя нету комментариев
Если заменить строку $query->join('comment', 'c', 'c.uid=u.uid');
на $query->leftJoin('comment', 'c', 'c.uid=u.uid');
должна вывестись одна строка в таблице с последней пустой ячейкой
А таблица пустая, потому что просто у данного пользователя нету комментариев
Если заменить строку $query->join('comment', 'c', 'c.uid=u.uid');
на $query->leftJoin('comment', 'c', 'c.uid=u.uid');
должна вывестись одна строка в таблице с последней пустой ячейкой
Вика dpm($чтото) это если у вас есть модуль девел. Для того что бы вы увидели что у вас хранится в переменной, в массиве, в form_state, form и т.д. Я вам это уже обьяснял. Поставьте https://drupal.org/project/devel
Вика dpm($чтото) это если у вас есть модуль девел. Для того что бы вы увидели что у вас хранится в переменной, в массиве, в form_state, form и т.д. Я вам это уже обьяснял. Поставьте https://drupal.org/project/devel[/quote]
Спасибо, восполню этот пробел
Комментарии
Вопрос в том, как это сделать программно? т.е. что прописать в модуле? мне для модуля нужно
Задача такова: в бд есть две таблицы: одна - comment, другая - users, нужно в модуле прописать код, который вычисляет количество комментарий пользователя. Имя пользователя вводится с формы
какого именно пользователя? где будет выводиться список? что из себя должен представлять список - просто список ссылок на страницы нод, комментов или что то сложнее?
вначале сделать, а потом искать то, что наделал)))
Имя пользователя вводится в форме. Список будет выводится в этой же форме в виде таблицы. Список должен представить из себя список ссылок.
views не устраивает?
У меня свой конкретный модуль) но нужна помощь в этом вопросе
Помощь конкретно в чем : в составлении запросов или в обработке результатов выполнения запросов? Или не знаете как создать страницу и вывести там форму и список ссылок под ней ?
Помощь нужна в составлении запроса. Ведь здесь нужно объединить две таблицы. А страница с формой есть
например, можно модулем Userpoints сделать - присвоить 1 поинт за коммент - и показывать кол-во поинтов,
то же и с нодами.
зачем объединять таблицы ?
на одной странице должны выводиться и ноды и комменты выбранного пользователя? Если да, то нужно 2 запроса делать
Мне нужно вывести только комменты нужного пользователя. То есть использовать таблицы comment и users в запросе. Но пока не получилось.
Девочка курсовую пишет. Не обижайте=)
напиши запрос тогда или хотя бы выясни у нее , что конкретно нужно вывести?
<?php
$username = 'Марат';
$query = db_select('user', 'u');
$query->condition('u.name', $username);
$query->innerJoin('comment', 'c', 'c.uid = u.uid');
$query->addExpression('COUNT(c.cid)', 'count');
$query->groupBy('u.uid');
$query->fields('u', array('uid', 'name'));
$result = $query->execute();
?>
Спасибо, попробую
С бодуна я. Уже помог ей чутка в другой теме. Хотя тоже не сразу понял что хотела=)
так все таки список комментов(нод) нужен или их количество?
Список комментов
лучше, чтобы пользователя можно было выбирать из выпадающего списка, ввести можно в textfield все что угодно лишние проверки не к чему
лучше сделать https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#select
список сформировать так
->fields('u', array('uid', 'name'))
->condition('u.uid', 0, '<>');
$options = $query->execute()->fetchAllKeyed();
'#options' => $options
В результате после выбора пользователя будет значение его uid , а потом уже делать остальные запросы
у меня выводится таблица с такими значениями как:id, имя, mail, группа. но нужно чтобы рядом также выводился и список комментов
Пыталась делать как здесь http://www.drupal.ru/node/64001 и как здесь http://xandeadx.ru/blog/drupal/88 но пока не получилось...
список материалов пользователя зная его uid выводится так
->fields('n', array('nid', 'title'))
->condition('n.uid', $uid);
$node_title_list = node_title_list($query_nodes->execute());
print render($node_title_list);
А что должен из себя представлять список комментов пользователя ?
Да хоть какое-нибудь представление. мне нужно использовать две таблицы в запросе, потому что вводится имя пользователя и по этому имени нужно найти его комменты. на выходе должна получится таблица с данными пользователя, где помимо основных данных,есть еще и столбец со списком комментов. таблица с основными у меня выводится, а вот как к ней добавить столбец где будут комменты не знаю, прошу помочь
Я не с Адыгеи. Просто там учусь
Здорово)
по имени можно получить объект пользователя user_load_by_name() и следовательно uid
У меня есть такая конструкция
$header = array('ID', 'Name','E-mail','Gruppa'); // Шапка таблицы
$rows = array();
$names = $form_state['values']['step1']['names'];
$query = db_select('users','t')// Запрос к БД
->condition('t.name',$names) //Условие выборки
->fields('t', array('uid','name','mail','grup'))
->execute();
foreach ($query as $users) {
$rows[] = array($users->uid, $users->name, $users->mail, $users->grup);
Но здесь я работаю только с одной таблицей. А мне нужно привязать еще одну, где хранятся комменты пользователей, чтобы данные из нее тоже вывести в этой таблице
а если это сверстать в html и дать ссылку, чтобы можно было глянуть какой вывод должен получиться или имелась ввиду результирующая таблица для запроса
Только таблица
Я так понимаю, должно получится что-то в виде этого:
$query = db_select('users','t');// Запрос к БД
$query->join('comment', 'c', 't.uid = c.uid');
$query->groupBy('c.uid');
$query->fields('t', array('uid','name','mail','grup'))
->condition('t.name',$names) //Условие выборки
->fields('c', array('name'));
$result = $query->execute();
но как это вывести вместе с моей таблицей?
$rows = array();
$names = $form_state['values']['step1']['names'];
$query = db_select('users','u')
->condition('u.name',$names) //Условие выборки
->fields('u', array('uid','name','mail','grup'));
$query->join('comment', 'c', 'c.uid=u.uid');
$query->fields('c', array('subject'));
$result = $query->execute();
foreach ($result as $users) {
$rows[] = array($users->uid, $users->name, $users->mail, $users->grup, $users->subject );
}
почему-то в таком случае не выводится ничего..то есть пустая таблица
что массив $rows в результате содержит?
Когда был вывод без присоединенной таблицы, то этот массив содержал необходимые значения из таблицы users, эти значения в нем перечислены
сейчас что в массиве содержится?
Сейчас видимо ничего, таблица на выходе пустая, а должны содержаться табличные значения uid,name,mail,grup,subject
так смотря как выводится таблица - я то не знаю
все данные должны быть в $rows - что показывает print_r($rows); ?
Сейчас вот так:
А до присоединения таблицы, она была заполнена значениями из таблицы users
ну либо такого пользователя нету , либо показывайте , что содержится в $rows - я с помощью модуля devel вывожу
dpm($rows);
у текстового поля есть свойство autocomplete_path, которое позволяет заполнятся полю автоматически, то есть в поле будет записан тот пользователь, который точно есть.
Сейчас остается вопрос в том, как вывести этот результат соединения двух таблиц в мою таблицу)
Вика а почему тот код что я давал не сразу заработал?
Не знаю даже, сейчас все работает:-)
точно сказать не могу , но выводить нужно в цикле
хотя и стандартной темизацией таблицы выведется
print theme('table', array('header' => $header, 'rows' => $rows));
Когда была просто таблица, берущая данные только из users, все выводилось стандартной темизацией. Сейчас вроде все также делаем, а таблица пустая выходит
это как?
запрос 100% рабочий , таблица тоже 100% выводится с результатами
В том, что код рабочий - не сомневаюсь. Я пробовала выводить результат операции join массивом, получилось, а вот чтобы вывести в таблицу, почему-то не выходит. Не пойму, в чем ошибка
Вика вы кэш чистите?
сколько желающих помочь))
правильная аватарка - залог успешной темы
Вот мы тебя и рассекретили , привет, Виктория. А то на MongoDB он перешел, а тут элементарную выборку с одним джоином не может сделать , прикидывается девочкой беспомощной.Я бы на твоем месте аватарку только поменял , а то слишком неправдоподобный мульт получился.Да и сразу же заметно - Виктория пропала , а ХулиGUN появился , палишся по-детски.
Ну так я не удивлюсь, если жену хулигана зовут Виктория(или любовницу) - хотя бы фантазию проявил при создании мульта
Что за ужас вы тут устроили?? Я обычная девушка, студентка, которая учится работать с друпалом и обратилась сюда за помощью. Фото было не мое, а первое попавшееся в интернете, т.к. не хотела выкладывать личное фото, а вы тут раздули. Вот моя ссылка вк http://vk.com/vikbelec1. Так что прекращайте этот непонятный диалог. Мне от этого сообщества нужна было помощь, а не то что здесь происходит.
В МГУ небось?
Там нет МГУ, там МГТУ. А я учусь в АГУ
Там нет МГУ, там МГТУ. А я учусь в АГУ
Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.
Вам пытаются объяснить.
Дело не в коде, дело в ваших данных.
Что с ними не так - только вам известно.
P.S. Кто-нить заметил филд grup в users?
grup в таблице users действительно есть, я сама туда эти данные добавила
$header = array('ID', 'Name', 'E-mail', 'Gruppa', 'Status'); // Шапка таблицы
$rows = array();
$names = $form_state['values']['step1']['names'];
$query = db_select('users','t')// Запрос к БД
->fields('t', array('uid', 'name', 'mail', 'grup', 'status'))
->condition('t.name',$names) //Условие выборки
->execute();
//Обрабатываем полученный результат, формируя массив данных
foreach ($query as $users) {
$rows[] = array($users->uid, $users->name, $users->mail, $users->grup, $users->status);
}
// сначала формируем $header и $rows, потом:
$form['mytable'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#empty' => t('No results.')
);
Вот так выводится таблица с данными из users, все получается.
НО, если сделать выборку из двух таблиц
$header = array('ID', 'Name','E-mail','Gruppa'); // Шапка таблицы
$rows = array();
$names = $form_state['values']['step1']['names'];
$query = db_select('users','u')
->condition('u.name',$names) //Условие выборки
->fields('u', array('uid','name','mail','grup'));
$query->join('comment', 'c', 'c.uid=u.uid');
$query->fields('c', array('subject'));
$result = $query->execute();
foreach ($result as $users) {
$rows[] = array($users->uid, $users->name, $users->mail, $users->grup, $users->subject );
то таблица, пуста...
Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.
Ну и какой отсюда вывод может быть?
У вас неверное условие для джойна, не отвечающее данным.
А скорее всего у вас тупо пусто в вашей переменной $names
В чем ошибка?
Нет, там вводится конкрентное значение. И с этим значением я работаю, ведь таблица с данными из users выводится, а она прежде всего использует значение names. Код выборки, я думаю, верный, другого варианта пока не вижу. Но во как вывести результат в ту же таблицу...
Посмотрите какой запрос получается и определите.
dpm($query);
Что это и для чего?
Объясните, если не сложно, что это и как можно использовать?
Понял. Вам не курсовик нужен, вам просто скучно
Да с чего вы взяли? Я хочу разобраться. И это действительно моя курсовая
$rows = array();
$names = $form_state['values']['step1']['names'];
$query = db_select('users','u')
->condition('u.name',$names)
->fields('u', array('uid','name','mail','grup'));
$query->join('comment', 'c', 'c.uid=u.uid');
$query->fields('c', array('subject'));
$result = $query->execute();
foreach ($result as $users) {
$rows[] = array($users->uid, $users->name, $users->mail, $users->grup, $users->subject );
}
if (count($rows) == 0) {
print 'У юзера комментов нет';
}
else {
print theme('table', array('header' => $header, 'rows' => $rows));
}
А таблица пустая, потому что просто у данного пользователя нету комментариев
Если заменить строку
$query->join('comment', 'c', 'c.uid=u.uid');
на
$query->leftJoin('comment', 'c', 'c.uid=u.uid');
должна вывестись одна строка в таблице с последней пустой ячейкой
[quote=drupby]
$rows = array();
$names = $form_state['values']['step1']['names'];
$query = db_select('users','u')
->condition('u.name',$names)
->fields('u', array('uid','name','mail','grup'));
$query->join('comment', 'c', 'c.uid=u.uid');
$query->fields('c', array('subject'));
$result = $query->execute();
foreach ($result as $users) {
$rows[] = array($users->uid, $users->name, $users->mail, $users->grup, $users->subject );
}
if (count($rows) == 0) {
print 'У юзера комментов нет';
}
else {
print theme('table', array('header' => $header, 'rows' => $rows));
}
Спасибо, попробую
Все получилось! Спасибо огромное!
Вика dpm($чтото) это если у вас есть модуль девел. Для того что бы вы увидели что у вас хранится в переменной, в массиве, в form_state, form и т.д. Я вам это уже обьяснял. Поставьте https://drupal.org/project/devel