[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите с запросом к БД
Страницы: 1, 2
Миша
Есть такая таблица

user posted image

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

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

_____________
Принимаю заказы, писать в ЛС
volter9
Медведь
Попробуй такой запрос:
SELECT m.*
FROM (
SELECT id, username, message
FROM messages
ORDER BY id DESC
) as m
GROUP BY m.username

Где messages - таблица

_____________
Мой блог
sergeiss
volter9, а зачем в подзапросе выбирать ВСЕ данные из таблицы, причем многократно??? Ты так просто убъешь Мускуль :)

В подзапросе надо выбирать одну строку для одного пользователя, а не всё целиком.
select id, username, (select message from messages m2 where m2.id=m1.id order by msg_date desc limit 1) as msg
from messages m1
group by id

Я тут предполагаю, что у каждой строки есть еще поле msg_date, показывающее дату-время записи. Запрос не проверял, но он должен работать.

Цитата (Медведь @ 5.04.2015 - 10:26)
Нарисовал от руки, конечно структура не такая, где имя пользователя - там его ид.

Вот чтобы не гадать, ты структуру покажи.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Миша
Цитата (sergeiss @ 5.04.2015 - 13:06)

select id, username, (select message from messages m2 where m2.id=m1.id order by msg_date desc limit 1) as msg
from messages m1
group by id


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


select id, username, // тут видимо какие поля достаём
(select message from messages m2 where m2.id=m1.id order by msg_date desc limit 1)
as msg
from messages m1 // таблица, а m1 это что?
group by id


_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (Медведь @ 5.04.2015 - 14:52)
А можно вас попросить объяснить, что делает каждая строчка.

Попросить - можно wink.gif Но сначала прочитай http://www.mysql.ru/docs/man/SELECT.html, а потом я поясню по тем вопросам, которые останутся.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Миша
Цитата (sergeiss @ 5.04.2015 - 15:09)
Цитата (Медведь @ 5.04.2015 - 14:52)
А можно вас попросить объяснить, что делает каждая строчка.

Попросить - можно wink.gif Но сначала прочитай http://www.mysql.ru/docs/man/SELECT.html, а потом я поясню по тем вопросам, которые останутся.



У меня интернет дико медленный dry.gif чтобы открыть страницу уходит 3-10 минут (((
Потому и спросил..

_____________
Принимаю заказы, писать в ЛС
volter9
sergeiss
Может быть и убью MySQL, но мой запрос хотя бы работает как просил ТС. smile.gif
А Ваш, к сожалению, нет (
Строчки и структура:
user posted image
Мой запрос:
user posted image
Ваш запрос:
user posted image
Мне если по честному, интересно как составить болеее оптимальный запрос на получение последних сообщений (строчек) пользователей (другой колонки). smile.gif
Но ничего быстрее чем тот который написал, не получается написать. :\

_____________
Мой блог
Invis1ble
Цитата (Медведь @ 5.04.2015 - 19:49)
Но, у меня интернет с* дико медленный

да всем похер, что у тебя там медленное
это твои проблемы
и чем быстрее ты для себя это уяснишь, тем лучше для тебя же

Свернутый текст
у моей бабушки нет компьютера
научите её программировать, например по почте
ну чё вам тяжело что-ли?!


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

sergeiss
Цитата (volter9 @ 5.04.2015 - 20:58)
Может быть и убью MySQL, но мой запрос хотя бы работает как просил ТС.

А ты прикинь, если там 1 млн. сообщений от 120 юзеров? Ты сколько раз сделаешь выборку по 1 миллиону??? Твой запрос просто не сработает. Точнее, он или он "положит" сервер, или будет работать очень и очень долго.

Что касается неработоспособности "моего" запроса"... Не проверял его, честно говоря :) В "моем" запросе id - это был айди пользователя (из таблицы пользователей), а не айди сообщения. То, что ты неправильно меня понял... Ну это не совсем мои проблемы :) А больше проблема Медведя, наверное, который не указал четкую структуру своих таблиц.

ОК. Замечательно всё работает, если указать правильные поля (пришлось-таки мне время потратить и создать табличку):

#таблица
CREATE TABLE `messages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_user` int(10) unsigned NOT NULL DEFAULT '0',
`username` varchar(45) NOT NULL DEFAULT '',
`message` varchar(45) NOT NULL DEFAULT '',
`msg_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)
ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

#данные
insert into messages
(id_user, username, message, msg_date)
values
( 1, 'user1', 'abcd', '2015-04-05 12:21:15'),
(
1, 'user1', 'bsldkj', '2015-03-06 17:34:35'),
(
4, 'user4', 'lklj ldj', '2014-02-22 21:22:33'),
(
4, 'user4', 'gsdf', '2015-03-01 05:15:22'),
(
4, 'user4', 'kjl glskjl j', '2015-02-12 09:03:05');

# новый запрос
select id_user, username, (select message from messages m2 where m2.id=m1.id order by msg_date desc limit 1) as msg, msg_date
from messages m1
group by id_user

# начальный "мой" запрос, для сравнения, что было изменено
select id, username, (select message from messages m2 where m2.id=m1.id order by msg_date desc limit 1) as msg
from messages m1
group by id

Поле username тут введено, на самом деле, чисто для наглядности. При правильной структуре таблиц тут надо оставить только id_user, а username убрать нафиг.


А Медведю я пояснять запрос не буду, пока он не прочитает указанный мной хэлп и пока не попытается сам разобраться. Как уже правильно было замечено, "всем похер, что у тебя там медленное" ;)

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.