Список всех публикаций пользователя

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

Комментарии

Аватар пользователя Виктория Виктория 28 апреля 2014 в 19:48

Задача такова: в бд есть две таблицы: одна - comment, другая - users, нужно в модуле прописать код, который вычисляет количество комментарий пользователя. Имя пользователя вводится с формы

Аватар пользователя drupby drupby 28 апреля 2014 в 19:49

"Виктория" wrote:
Подскажите, как найти список всех публикаций (комментариев) пользователя?

какого именно пользователя? где будет выводиться список? что из себя должен представлять список - просто список ссылок на страницы нод, комментов или что то сложнее?
"kosHta" wrote:
"Виктория" написал(а):
как найти
"Виктория" написал(а):
сделать

вначале сделать, а потом искать то, что наделал)))

Аватар пользователя Виктория Виктория 28 апреля 2014 в 19:50

Имя пользователя вводится в форме. Список будет выводится в этой же форме в виде таблицы. Список должен представить из себя список ссылок.

Аватар пользователя drupby drupby 28 апреля 2014 в 19:51

"Виктория" wrote:
нужно в модуле прописать код, который вычисляет количество комментарий пользователя. Имя пользователя вводится с формы

views не устраивает?

Аватар пользователя drupby drupby 28 апреля 2014 в 20:05

"Виктория" wrote:
У меня свой конкретный модуль) но нужна помощь в этом вопросе

Помощь конкретно в чем : в составлении запросов или в обработке результатов выполнения запросов? Или не знаете как создать страницу и вывести там форму и список ссылок под ней ?

Аватар пользователя drupby drupby 28 апреля 2014 в 21:02

"Виктория" wrote:
Ведь здесь нужно объединить две таблицы.

зачем объединять таблицы ?
на одной странице должны выводиться и ноды и комменты выбранного пользователя? Если да, то нужно 2 запроса делать

Аватар пользователя Виктория Виктория 28 апреля 2014 в 21:35

Мне нужно вывести только комменты нужного пользователя. То есть использовать таблицы comment и users в запросе. Но пока не получилось.

Аватар пользователя drupby drupby 28 апреля 2014 в 21:17

"Moel" wrote:

Девочка курсовую пишет. Не обижайте=)

напиши запрос тогда или хотя бы выясни у нее , что конкретно нужно вывести?

Аватар пользователя imarat imarat 28 апреля 2014 в 21:24

<?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();

?>

Аватар пользователя Виктория Виктория 28 апреля 2014 в 21:36

imarat wrote:
<?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();

?>


Спасибо, попробую

Аватар пользователя drupby drupby 28 апреля 2014 в 21:40

"Виктория" wrote:
Мне нужно вывести только комменты нужного пользователя.

так все таки список комментов(нод) нужен или их количество?

Аватар пользователя drupby drupby 28 апреля 2014 в 22:01

"Виктория" wrote:
Имя пользователя вводится с формы

лучше, чтобы пользователя можно было выбирать из выпадающего списка, ввести можно в textfield все что угодно лишние проверки не к чему
лучше сделать https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#select
список сформировать так

$query = db_select('users','u')
->fields('u', array('uid', 'name'))
->condition('u.uid', 0, '<>');
$options = $query->execute()->fetchAllKeyed();

'#options' =>  $options

В результате после выбора пользователя будет значение его uid , а потом уже делать остальные запросы

Аватар пользователя Виктория Виктория 28 апреля 2014 в 22:05

у меня выводится таблица с такими значениями как:id, имя, mail, группа. но нужно чтобы рядом также выводился и список комментов

Аватар пользователя drupby drupby 28 апреля 2014 в 22:21

список материалов пользователя зная его uid выводится так

$query_nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.uid', $uid);
$node_title_list = node_title_list($query_nodes->execute());
print render($node_title_list);

А что должен из себя представлять список комментов пользователя ?

Аватар пользователя Виктория Виктория 28 апреля 2014 в 22:53

Да хоть какое-нибудь представление. мне нужно использовать две таблицы в запросе, потому что вводится имя пользователя и по этому имени нужно найти его комменты. на выходе должна получится таблица с данными пользователя, где помимо основных данных,есть еще и столбец со списком комментов. таблица с основными у меня выводится, а вот как к ней добавить столбец где будут комменты не знаю, прошу помочь

Аватар пользователя drupby drupby 28 апреля 2014 в 23:17

"Виктория" wrote:
потому что вводится имя пользователя и по этому имени нужно найти его комменты.

по имени можно получить объект пользователя user_load_by_name() и следовательно uid

Аватар пользователя Виктория Виктория 28 апреля 2014 в 23:19

У меня есть такая конструкция
$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);

Но здесь я работаю только с одной таблицей. А мне нужно привязать еще одну, где хранятся комменты пользователей, чтобы данные из нее тоже вывести в этой таблице

Аватар пользователя drupby drupby 28 апреля 2014 в 23:25

"Виктория" wrote:
на выходе должна получится таблица с данными пользователя, где помимо основных данных,есть еще и столбец со списком комментов.

а если это сверстать в html и дать ссылку, чтобы можно было глянуть какой вывод должен получиться или имелась ввиду результирующая таблица для запроса

Аватар пользователя Виктория Виктория 28 апреля 2014 в 23:29

Я так понимаю, должно получится что-то в виде этого:
$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();

но как это вывести вместе с моей таблицей?

Аватар пользователя drupby drupby 28 апреля 2014 в 23:44

"Виктория" wrote:
$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);

$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 );
}

Аватар пользователя drupby drupby 28 апреля 2014 в 23:53

"Виктория" wrote:
почему-то в таком случае не выводится ничего..то есть пустая таблица

что массив $rows в результате содержит?

Аватар пользователя Виктория Виктория 28 апреля 2014 в 23:57

Когда был вывод без присоединенной таблицы, то этот массив содержал необходимые значения из таблицы users, эти значения в нем перечислены

Аватар пользователя drupby drupby 29 апреля 2014 в 0:00

"Виктория" wrote:

Когда был вывод без присоединенной таблицы, то этот массив содержал необходимые значения из таблицы users, эти значения в нем перечислены

сейчас что в массиве содержится?

Аватар пользователя drupby drupby 29 апреля 2014 в 0:07

"Виктория" wrote:
Сейчас видимо ничего, таблица на выходе пустая

так смотря как выводится таблица - я то не знаю
все данные должны быть в $rows - что показывает print_r($rows); ?

Аватар пользователя drupby drupby 10 ноября 2015 в 11:49

"Виктория" wrote:
Сейчас вот так:

ну либо такого пользователя нету , либо показывайте , что содержится в $rows - я с помощью модуля devel вывожу
dpm($rows);

Аватар пользователя Виктория Виктория 29 апреля 2014 в 0:20

у текстового поля есть свойство autocomplete_path, которое позволяет заполнятся полю автоматически, то есть в поле будет записан тот пользователь, который точно есть.

Аватар пользователя drupby drupby 29 апреля 2014 в 0:35

"Виктория" wrote:

Сейчас остается вопрос в том, как вывести этот результат соединения двух таблиц в мою таблицу)

точно сказать не могу , но выводить нужно в цикле

хотя и стандартной темизацией таблицы выведется
print theme('table', array('header' => $header, 'rows' => $rows));

Аватар пользователя Виктория Виктория 29 апреля 2014 в 8:39

Когда была просто таблица, берущая данные только из users, все выводилось стандартной темизацией. Сейчас вроде все также делаем, а таблица пустая выходит

Аватар пользователя drupby drupby 29 апреля 2014 в 13:04

"Виктория" wrote:
сейчас все работает:-)

"Виктория" wrote:
а таблица пустая выходит

это как?
запрос 100% рабочий , таблица тоже 100% выводится с результатами

Аватар пользователя Виктория Виктория 30 апреля 2014 в 11:03

В том, что код рабочий - не сомневаюсь. Я пробовала выводить результат операции join массивом, получилось, а вот чтобы вывести в таблицу, почему-то не выходит. Не пойму, в чем ошибка

Аватар пользователя drupby drupby 29 апреля 2014 в 23:03

"ХулиGUN" wrote:
Надо себе завести бабский акк для тупых вопросов))))

Вот мы тебя и рассекретили , привет, Виктория. А то на MongoDB он перешел, а тут элементарную выборку с одним джоином не может сделать , прикидывается девочкой беспомощной.Я бы на твоем месте аватарку только поменял , а то слишком неправдоподобный мульт получился.Да и сразу же заметно - Виктория пропала , а ХулиGUN появился , палишся по-детски.

Аватар пользователя drupby drupby 29 апреля 2014 в 23:22

"kosHta" wrote:
Ото Дэн вчера так напрягся,
када я про Майкоп выпытывать начал ))

Ну так я не удивлюсь, если жену хулигана зовут Виктория(или любовницу) - хотя бы фантазию проявил при создании мульта

Аватар пользователя Виктория Виктория 30 апреля 2014 в 10:56

Что за ужас вы тут устроили?? Я обычная девушка, студентка, которая учится работать с друпалом и обратилась сюда за помощью. Фото было не мое, а первое попавшееся в интернете, т.к. не хотела выкладывать личное фото, а вы тут раздули. Вот моя ссылка вк http://vk.com/vikbelec1. Так что прекращайте этот непонятный диалог. Мне от этого сообщества нужна было помощь, а не то что здесь происходит.

Аватар пользователя Виктория Виктория 30 апреля 2014 в 11:08

Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 30 апреля 2014 в 11:10

"Виктория" wrote:
Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.

Вам пытаются объяснить.
Дело не в коде, дело в ваших данных.
Что с ними не так - только вам известно.

P.S. Кто-нить заметил филд grup в users?

Аватар пользователя Виктория Виктория 30 апреля 2014 в 11:15

RxB wrote:
"Виктория" wrote:
Если все же сможете помочь объяснить, как вывести в таблицу результат, буду очень благодарна, с друпалом я только учусь работать, поэтому некоторые элементарные для вас вещи я еще не пойму.

Вам пытаются объяснить.
Дело не в коде, дело в ваших данных.
Что с ними не так - только вам известно.

P.S. Кто-нить заметил филд grup в users?


grup в таблице users действительно есть, я сама туда эти данные добавила

Аватар пользователя Виктория Виктория 30 апреля 2014 в 11:21

$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 );

то таблица, пуста...

Аватар пользователя Виктория Виктория 30 апреля 2014 в 11:17

Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 30 апреля 2014 в 11:26

"Виктория" wrote:
Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.

Ну и какой отсюда вывод может быть?
У вас неверное условие для джойна, не отвечающее данным.
А скорее всего у вас тупо пусто в вашей переменной $names

Аватар пользователя Виктория Виктория 30 апреля 2014 в 12:44

RxB wrote:
"Виктория" wrote:
Когда я вывожу таблицу с данными только из таблицы users моей бд, все работает. Но когда я использую оператор присоединения, чтобы сделать выборку из двух таблиц, то таблица в итоге выводится пустой.

Ну и какой отсюда вывод может быть?
У вас неверное условие для джойна, не отвечающее данным.
А скорее всего у вас тупо пусто в вашей переменной $names

Нет, там вводится конкрентное значение. И с этим значением я работаю, ведь таблица с данными из users выводится, а она прежде всего использует значение names. Код выборки, я думаю, верный, другого варианта пока не вижу. Но во как вывести результат в ту же таблицу...

Аватар пользователя Виктория Виктория 30 апреля 2014 в 12:37

RxB wrote:
Посмотрите какой запрос получается и определите.
dpm($query);

Объясните, если не сложно, что это и как можно использовать?

Аватар пользователя Виктория Виктория 30 апреля 2014 в 11:54

RxB wrote:
Понял. Вам не курсовик нужен, вам просто скучно

Да с чего вы взяли? Я хочу разобраться. И это действительно моя курсовая

Аватар пользователя drupby drupby 30 апреля 2014 в 14:48
$header = array('ID', 'Name','E-mail','Gruppa', 'Subject'); // Шапка таблицы
$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');
должна вывестись одна строка в таблице с последней пустой ячейкой

Аватар пользователя Виктория Виктория 30 апреля 2014 в 21:40

[quote=drupby]

$header = array('ID', 'Name','E-mail','Gruppa', 'Subject'); // Шапка таблицы
$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));
}

Спасибо, попробую

Аватар пользователя Виктория Виктория 30 апреля 2014 в 21:55

drupby wrote:

$header = array('ID', 'Name','E-mail','Gruppa', 'Subject'); // Шапка таблицы
$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');
должна вывестись одна строка в таблице с последней пустой ячейкой

Все получилось! Спасибо огромное!

Аватар пользователя Moel Moel 30 апреля 2014 в 21:14

Вика dpm($чтото) это если у вас есть модуль девел. Для того что бы вы увидели что у вас хранится в переменной, в массиве, в form_state, form и т.д. Я вам это уже обьяснял. Поставьте https://drupal.org/project/devel

Аватар пользователя Виктория Виктория 30 апреля 2014 в 21:38

Moel wrote:
Вика dpm($чтото) это если у вас есть модуль девел. Для того что бы вы увидели что у вас хранится в переменной, в массиве, в form_state, form и т.д. Я вам это уже обьяснял. Поставьте https://drupal.org/project/devel[/quote]
Спасибо, восполню этот пробел