powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Простой запрос на выборку и подсчёт
23 сообщений из 23, страница 1 из 1
Простой запрос на выборку и подсчёт
    #39099975
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Прощу помочь в формировании простого запроса, который отобразит последние 10 комментариев, при этом покажет кто именно оставил комментарий, покажет сам текст комментария и количество сколько всего оставил комментариев тот или иной пользователь.
Т.е. есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
1 - Паша - Текст1
2 - Вася - Текст2
3 - Сергей - Текст3
4 - Никита - Текст4
5 - Паша - Текст5
6 - Паша - Текст6
....
N - Юзер Коммент N



Должно вывести:
Паша - 3 коммента - Текст6
Паша - 3 коммента - Текст5
Никита - 1 коммента - Текст4
Сергей - 1 коммента - текст3
Вася - 1 коммент - текст2
Паша - 3 коммента - текст1
......
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39099987
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletusпоследние 10 комментариев
Последние по какому критерию?
А вообще
Код: sql
1.
ORDER BY критерий DESC LIMIT 1
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39099988
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, LIMIT 10
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39099990
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, ну последние по айдишнику. Тут мне важно запрос на отображение и подсчёт, чтобы всё в одном запросе, а то я как дурак через цикл в пхп делаю.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39099996
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты хочешь в одном запросе получить данные разных уровней группировки. Без подзапроса (на получение количества комментов) не получится.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39100002
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, пусть с подзапросами, но это явно лучше, чем сейчас у меня )))
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39100034
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletusэто явно лучше, чем сейчас у меня
Сейчас у тебя, если верить тому, что ты тут пишешь - вообще ничего.
Покажи хотя бы DDL таблицы. Ещё лучше - плюс тестовое наполнение. Совсем хорошо - если в форме работающих SQL-скриптов. Ну и, конечно, желаемый на этом наполнении результат.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39100108
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, не думал, что мой вопрос будет настолько сложным, что у тебя возникнет ещё куча вопросов.
Создаём таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE IF NOT EXISTS `table` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(250) NOT NULL,
  `comment` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



Создаём комментарии:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
INSERT INTO `table` (`id`, `name`, `comment`) VALUES
(1, 'Паша', 'коментарий'),
(2, 'Сергей', 'коментарий'),
(3, 'Максим', 'коментарий'),
(4, 'Коля', 'коментарий'),
(5, 'Паша', 'коментарий'),
(6, 'Паша', 'коментарий'),
(7, 'Паша', 'коментарий'),
(8, 'Паша', 'коментарий'),
(9, 'Паша', 'коментарий');



Результат как в первом сообщении...
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39100190
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletusи количество сколько всего оставил комментариев тот или иной пользователь.количество из этих десяти или из всей таблицы?
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39100243
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select t1.name,
       concat(sq.cnt,' комментариев'),
       t1.comment
from `table` t1,
     ( select t2.name, count(t2.id) cnt
       from `table` t2
       group by t2.name
     ) sq
where t1.name=sq.name
order by t1.id desc;
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39109927
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы, не думайте что я забил на тему. Просто пытался сам чуток разобраться. Что-то не выходит. При большом количестве записей просто виснет. Решил немного точнее вопрос сформулировать и добавить столбец.

Запрос на создание таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE IF NOT EXISTS `table` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `user` varchar(250) NOT NULL,
  `manager` varchar(250) NOT NULL,
  `comment` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


Запрос на добавление строк:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
INSERT INTO `table` (`id`, `user`, `manager`, `comment`) VALUES
(1, 'Паша', 'М1', 'коментарий'),
(2, 'Сергей', 'М1', 'коментарий'),
(3, 'Максим', 'М1', 'коментарий'),
(4, 'Коля', 'М3', 'коментарий'),
(5, 'Паша', 'М2', 'коментарий'),
(6, 'Паша', 'М8', 'коментарий'),
(7, 'Паша', 'М3', 'коментарий'),
(8, 'Марина', 'М1', 'коментарий'),
(9, 'Паша', 'М5', 'коментарий'),
(10, 'Сергей', 'М5', 'коментарий'),
(11, 'Максим', 'М5', 'коментарий'),
(12, 'Света', 'М1', 'коментарий'),
(13, 'Света', 'М7', 'коментарий'),
(14, 'Света', 'М3', 'коментарий'),
(15, 'Света', 'М2', 'коментарий'),
(16, 'Коля', 'М1', 'коментарий'),
(17, 'Витя', 'М1', 'коментарий'),
(18, 'Никита', 'М1', 'коментарий'),
(19, 'Денис', 'М1', 'коментарий'),
(20, 'Лена', 'М1', 'коментарий'),
(21, 'Лена', 'М2', 'коментарий'),
(22, 'Катя', 'М1', 'коментарий'),
(23, 'Катя', 'М2', 'коментарий'),
(24, 'Катя', 'М4', 'коментарий'),
(25, 'Женя', 'М5', 'коментарий'),
(25, 'Женя', 'М1', 'коментарий');


Важно замечание!! Строк примерно 13.000 штук и будет больше.

Суть заключается в том, что каждый пользователь оставляет отзыв про менеджера и требуется вывести самые свежие 10 комментаторов для менеджера "М1"
Но для каждой записи необходимо сделать отображение сколько всего отзывов оставил тот или иной комментатор, не конкретно про данного менеджера, а вообще сколько всего. Т.е. по идее результат должен быть таким:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
1. Женя (2)
2. Катя (3)
3. Лена (2)
4. Денис (1)
5. Никита (1)
6. Витя (1)
7. Коля (1)
8. Света (4)
9. Марина (1)
10. Максим (1)



Вроде ничего не забыл. Прошу помочь составить запрос, который смог бы это отобразить и желательно, чтобы запрос работал с большим количеством записей.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39110104
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletusтребуется вывести самые свежие 10 комментаторов для менеджера "М1"
В структуре отсутствует поле, которое устанавливает порядок очерёдности записей (вероятно, это должен быть штамп времени комментария). ID на эту роль подходит формально, но не идеологически.
Впрочем, если всё-таки предположить, что именно это поле определяет порядок - шаблон я уже дал. Правда, тут ты упрёшься в о, что в подзапросе нельзя использовать LIMIT. Но если подзапрос с LIMIT оформить как вьюв - то всё получится как нужно.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39110548
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
автор10. Максим (1)А здесь точно нет ошибки?
По вашему описанию задачи, должно быть 2.

Попробуйте такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select v.name,
       ( select count(1) cnt
         from `table` t2
         where t2.user = t1.user
       ) comment_cnt,
       v.comment
from (select t1.user,
             t1.comment
      from `table` t1
      where t1.manager = 'M1'
      order by t1.id desc;
      limit 1, 10
     ) v


Если результат устроит, то хорошо бы добавить пару индексов, для того что бы и время выполнения устроило.
Код: sql
1.
create index idx_table_n1 on `table` (user)


и
Код: sql
1.
create index idx_table_n2 on `table` (manager, id desc)



P.S.Ну и план запроса после создания индексов покажите.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39110666
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest , спасибо.
авторА здесь точно нет ошибки?
По вашему описанию задачи, должно быть 2.
Совершенно верно подметили. Это я уже сам ошибся, должно быть действительно 2.

авторПопробуйте такой запрос:Сейчас попробую, обязательно отпишусь.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39110686
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выдало ошибку авторUnknown column 't1.user' in 'where clause'
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39110691
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И на это тоже по началу ругалась:
авторUnknown column 'v.name' in 'field list'
Но я так понимаю там вместо name должно быть user, я исправил. Но выдало другую ошибку выше.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39110792
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletusзапроса, который отобразит последние 10 комментариев, при этом покажет кто именно оставил комментарий, покажет сам текст комментария и количество сколько всего оставил комментариев тот или иной пользователь.
GamletusСоздаём таблицу:
GamletusСоздаём комментарии:
А далее
Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE VIEW subquery
AS
SELECT `id`, `user`, `manager`, `comment`
FROM `table`
ORDER BY id DESC
LIMIT 10;


И соответственно
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t1.`id`, t1.`user`, t1.`manager`, t1.`comment`, t2.`count`
FROM subquery t1,
( SELECT `user`, COUNT(`comment`) `count`
  FROM subquery
  GROUP BY `user` ) t2
WHERE t1.`user` = t2.`user`
ORDER BY t1.`id` ASC;
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39111449
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina , попробовал ваш запрос, но что-то не сработало.

В общем господа, мой давний и верный друг очень сильно помог с данной ситуацией. Вот пример рабочего запроса, который быстро отображает именно то, что необходимо:
Код: sql
1.
2.
3.
SELECT t1.id, t1.user, t1.manager, t1.comment, t3.counts FROM table AS t1 INNER JOIN
(SELECT id FROM table WHERE manager = 'М1' ORDER BY id DESC LIMIT 10) AS t2 ON t2.id = t1.id LEFT OUTER JOIN
(SELECT user, COUNT(id) AS counts FROM table GROUP BY user) AS t3 ON t3.user = t1.user


Вдруг кому-то пригодится.
Все, кто старался помочь огромнейшее спасибо ))
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39111481
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletusпопробовал ваш запрос, но что-то не сработало.
Потому что Вы меняете задачу. То ли она за эти 2 недели поменялась, то ли Вы поняли, что сначала ошиблись с формулировкой...
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39111583
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
GamletusВыдало ошибку авторUnknown column 't1.user' in 'where clause'
Это потому, что я с ошибкой написал.
Должно быть так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select v.user,
       ( select count(1) cnt
         from `table` t2
         where t2.user = v.user
       ) comment_cnt,
       v.comment
from (select t1.user,
             t1.comment
      from `table` t1
      where t1.manager = 'M1'
      order by t1.id desc;
      limit 1, 10
     ) v


MySQL-я под рукой нет, поэтому прошу извинить за ошибки...

P.S. Покажите планы для данного запроса и для своего финального варианта.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39112498
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamletus Akina , попробовал ваш запрос, но что-то не сработало.

В общем господа, мой давний и верный друг очень сильно помог с данной ситуацией. Вот пример рабочего запроса, который быстро отображает именно то, что необходимо:
Код: sql
1.
2.
3.
SELECT t1.id, t1.user, t1.manager, t1.comment, t3.counts FROM table AS t1 INNER JOIN
(SELECT id FROM table WHERE manager = 'М1' ORDER BY id DESC LIMIT 10) AS t2 ON t2.id = t1.id LEFT OUTER JOIN
(SELECT user, COUNT(id) AS counts FROM table GROUP BY user) AS t3 ON t3.user = t1.user


Вдруг кому-то пригодится.
Все, кто старался помочь огромнейшее спасибо ))

Gamletus, я не хочу ваc обидеть, но в вашем супе чего-то не хватает. Вы сами то этот запрос пробовали?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
22	Катя	М1	коментарий	3
20	Лена	М1	коментарий	2
19	Денис	М1	коментарий	1
18	Никита	М1	коментарий	1
17	Витя	М1	коментарий	1
16	Коля	М1	коментарий	2
12	Света	М1	коментарий	4
8	Марина	М1	коментарий	1
3	Максим	М1	коментарий	2
2	Сергей	М1	коментарий	2



А куда собственно делся Паша с его 5 комментариями?
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39112672
Gamletus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaПотому что Вы меняете задачу. То ли она за эти 2 недели поменялась, то ли Вы поняли, что сначала ошиблись с формулировкой...Я потом показал свой вопрос более полным. Потому как действительно решил, что в первом сообщении как-то скудно всё показал.

*MySQL-я под рукой нет, поэтому прошу извинить за ошибки...
P.S. Покажите планы для данного запроса и для своего финального варианта.Я к сожалению не имею возможности показать планы выполнения, т.к. не являюсь специалистом и специального софта не имею. Ваш запрос обязательно попробую.



alexnewsGamletus, я не хочу ваc обидеть, но в вашем супе чего-то не хватает. Вы сами то этот запрос пробовали?Да, конечно. Всё отлично работает )))



alexnewsА куда собственно делся Паша с его 5 комментариями?А Паши по условиям быть не должно, т.к. отображать необходимо было только последние 10 комментариев. А Паша как бы в их число не входит.
...
Рейтинг: 0 / 0
Простой запрос на выборку и подсчёт
    #39112754
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GamletusЯ потом показал свой вопрос более полным.
Не более полным, а совершенно изменил задачу. Мой вариант даёт решение первой задачи и никакого отношения не имеет ко второй.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Простой запрос на выборку и подсчёт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]