0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 1351 Просмотров
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Здравствуйте .подскажите с запросом. Есть таблица родительская таблица - Subject, подчиненная ей messages. Запросом я вытаскиваю все Subject по определенной категории и подсчитываю сколько message в каждой subject, мне нужно добавить запрос чтобы получить автора последнего message
Код
$db = JFactory::getDbo();
       $query = $db->getQuery(true);
       $query='SELECT s.*,COUNT(DISTINCT m.message_id) AS count_messages, '
              .' FROM #__subjects AS s'
              .' LEFT JOIN #__messages AS m ON s.subject_id=m.subject_id'
              .' WHERE s.category_id='.(int)$category_id.' AND m.state=1 AND s.state=1'
              .' GROUP BY s.subject_id';
       $db->setQuery($query);
       $category_subjects = $db->loadAssocList();
      
 
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Сделайте подзапрос в операторе select
интернет-блог: http://websiteprog.ru
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Сделайте подзапрос в операторе select
Можно пример не делал подзапросы
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Код: php
...
$query='SELECT s.*,COUNT(DISTINCT m.message_id) AS count_messages,
(SELECT author_id FROM #__messages WHERE subject_id=s.subject_id  ORDER by message_id DESC LIMIT 1) as last_msg_author '
...

чето типа того
« Последнее редактирование: 21.08.2015, 22:04:26 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
выдал что Неправильный синтаксис не пойму вроде ваш подзапрос подходит
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
попробуйте в ордере ASC (возможно DESC), по идее должен подтянуться автор последний по ордеру
Код
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('s.*,COUNT(DISTINCT m.message_id) AS count_messages, m.message_autor');
$query->from('FROM #__subjects AS s');
$query->leftJoin('#__messages AS m ON (s.subject_id=m.subject_id)');
$query->where('s.category_id='.(int)$category_id);
$query->where('m.state=1');
$query->where('s.state=1');
$query->group('s.subject_id');
$query->order('m.message_id ASC');
$db->setQuery($query);
$category_subjects = $db->loadAssocList();
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
попробуйте в ордере ASC (возможно DESC), по идее должен подтянуться автор последний по ордеру

Запрос  с группировкой, вы это видите в конце?  .' GROUP BY s.subject_id';
интернет-блог: http://websiteprog.ru
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Запрос  с группировкой, вы это видите в конце?  .' GROUP BY s.subject_id';
ну все правильно, групирует по ид темы и присоединяет автора из последней row, а так как у нас order ASC по ид сообщения, значит возьмет автора с row у которого наибольший ид
единственный минус это сортировка тем будет по такому же принципу

я не уверен насчет правильности запроса, но должно прокатить такое, а если нет, то да, только внутренний SELECT, каквы написали выше
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Группировку с сортировкой не путайте
интернет-блог: http://websiteprog.ru
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Группировка для того чтобы подсчитать количество записей в каждой теме, и нужно получить последнюю строку каждой темы
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Группировка для того чтобы подсчитать количество записей в каждой теме, и нужно получить последнюю строку каждой темы

ну так запрос мой проверяли?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Да не будет ваш запрос работать, это очевидно, вы понимаете что тут джоин с группировкой используется чтобы записи подсчитать?
без count ваш запрос вернут кучу записей так как на каждый subject_id будет присоеденяться по каждой записи из таблицы messages, ну а используемый оператор count  в такой записи вообще сделает так что вернется только одна запись  ^-^
http://stackoverflow.com/questions/4082713/mysql-returns-only-one-row-when-using-count
« Последнее редактирование: 21.08.2015, 23:46:00 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
ну так запрос мой проверяли?
Ваш запрос совсем не то
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Здравствуйте .подскажите с запросом. Есть таблица родительская таблица - Subject, подчиненная ей messages. Запросом я вытаскиваю все Subject по определенной категории и подсчитываю сколько message в каждой subject, мне нужно добавить запрос чтобы получить автора последнего message
Код
$db = JFactory::getDbo();
       $query = $db->getQuery(true);
       $query='SELECT s.*,COUNT(DISTINCT m.message_id) AS count_messages,(SELECT user_id FROM #__esforum_messages ORDER BY message_id  LIMIT 1) AS last_user '
              .' FROM #__subjects AS s'
              .' LEFT JOIN #__messages AS m ON s.subject_id=m.subject_id'
              .' WHERE s.category_id='.(int)$category_id.' AND m.state=1 AND s.state=1'
              .' GROUP BY s.subject_id';
       $db->setQuery($query);
       $category_subjects = $db->loadAssocList();
       
   
Добавил строку после COUNT, last_user возвращает 0, хотя есть сообщения и по любому должен быть id'шник какой-то
Код
(SELECT user_id FROM #__esforum_messages ORDER BY message_id  LIMIT 1) AS last_user
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
проверил свой запрос!
count  возвращает правильный, а вот autor_id берет из первой попавшейся записи!
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
проверил свой запрос!
count  возвращает правильный, а вот autor_id берет из первой попавшейся записи!

Сколько у вас всего записей возвращается? Одна небось? :-)
До сих пор не въехали что нужно считать количество сообщений для каждой записи из subject?

Цитировать
Добавил строку после COUNT, last_user возвращает 0, хотя есть сообщения и по любому должен быть id'шник какой-то
Код: php
(SELECT user_id FROM `#__esforum_messages` ORDER BY message_id DESC LIMIT 1) AS last_user

DESC пропустили?
Выполните этот запрос (SELECT user_id FROM `#__esforum_messages` ORDER BY message_id DESC LIMIT 1) сначало отдельно и посмотрите что вернет. Если все хорошо то вставьте его как подзапрос. Нет, так смотрите в чем ошибка.
« Последнее редактирование: 22.08.2015, 00:08:39 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Не знаю то ли я поздно сидел то ли что, вроде пробовал но написал еще раз и получилось добавил две строки после count

Код
'(SELECT message_time FROM #__messages WHERE subject_id=s.subject_id ORDER BY message_id DESC LIMIT 1) AS last_time,'
 '(SELECT user_id FROM #__messages WHERE subject_id=s.subject_id ORDER BY message_id DESC LIMIT 1) AS last_user'
*

spirit1086

  • Захожу иногда
  • 115
  • 1 / 0
Сколько у вас всего записей возвращается? Одна небось? :-)
До сих пор не въехали что нужно считать количество сообщений для каждой записи из subject?
Код: php
(SELECT user_id FROM `#__esforum_messages` ORDER BY message_id DESC LIMIT 1) AS last_user

DESC пропустили?
Выполните этот запрос сначало отдельно и посмотрите что вернет. Если все хорошо то вставьте его как подзапрос.
А мне и надо чтобы в переменой last_user был id юзера последней строки
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Сколько у вас всего записей возвращается? Одна небось? :-)
До сих пор не въехали что нужно считать количество сообщений для каждой записи из subject?

та все я вьехал, не умничайте, темы две сообщений 4 по два на тему

П.С Можно получить время последнего сообщения:

Код
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('s.*,COUNT(DISTINCT m.message_id) AS count_messages, MAX(m.time) AS last_time');
$query->from('FROM #__subjects AS s');
$query->leftJoin('#__messages AS m ON (s.subject_id=m.subject_id)');
$query->where('s.category_id='.(int)$category_id);
$query->where('m.state=1');
$query->where('s.state=1');
$query->group('s.subject_id');
$db->setQuery($query);
$category_subjects = $db->loadAssocList();

а ид автора получается только подзапросом
« Последнее редактирование: 22.08.2015, 00:17:32 от saharin88 »
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Есть, но это конечно извращения )

Код
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('s.*,COUNT(DISTINCT m.message_id) AS count_messages, SUBSTRING_INDEX(GROUP_CONCAT(m.autor_id ORDER BY m.time DESC), ',', 1) AS last_msg_author');
$query->from('FROM #__subjects AS s');
$query->leftJoin('#__messages AS m ON (s.subject_id=m.subject_id)');
$query->where('s.category_id='.(int)$category_id);
$query->where('m.state=1');
$query->where('s.state=1');
$query->group('s.subject_id');
$db->setQuery($query);
$category_subjects = $db->loadAssocList();
« Последнее редактирование: 22.08.2015, 09:29:34 от saharin88 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не могу добавить запись в БД

Автор sarmin

Ответов: 2
Просмотров: 1230
Последний ответ 23.01.2016, 12:04:32
от vipiusss
Запись в БД из формы в плагине (модуле). Как!

Автор Sergeyy

Ответов: 13
Просмотров: 1276
Последний ответ 13.11.2015, 11:01:18
от Sergeyy
Список множественного выбора (создание списка, передача, запись, вывод данных) Joomlaa 3.x

Автор ninth

Ответов: 20
Просмотров: 3395
Последний ответ 11.11.2014, 13:59:39
от lesh1j
Добавление сортировки по второй таблице

Автор ninth

Ответов: 6
Просмотров: 1007
Последний ответ 30.09.2014, 12:37:55
от b2z
[Решено] Запись данных через сайт в бд для Joomla 3.0

Автор klubnichkaaa

Ответов: 7
Просмотров: 3246
Последний ответ 26.10.2012, 22:07:48
от b2z