|
wats ↓
|
 |
|
05 Июль, 2011, 09:44:41
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Здраствуйте! Есть две таблицы: users и user_messages. Нужно подсчитать колличество новых сообщений для пользователя в таблице user_messages и вывести юзеров которые эти сообщения написали. То есть в итоге должно получится примерно так:
3 новых сообщения от Вася Пупкин
1 новое сообшение от Маша Пупкина
Таблица user_messages:
id // ид сообщения
from // ид того кто написал
to // ид того кому написали
message // сообщение
status // статус сообщения (1 - прочитано, 0 - не прочитано)
Таблица users стандартная, содержит данные юзеров.
Делал такой запрос:
SELECT `users`.*, (SELECT COUNT("user_messages.id") FROM user_messages WHERE user_messages.from = users.id AND user_messages.to = 5 AND user_messages.status = 0) AS `messages_count` FROM `users`
Выводит всех юзеров из таблицы users, а надо что бы только тех кто новые сообщения написал, знаю что в запросе еще наверно надо использовать join или group_by, но не знаю как правильно.
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
Animator ↓
|
 |
|
05 Июль, 2011, 10:41:59 , спустя 57 минут 18 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 3
Сообщений: 200 Сила слова: 1.5
|
что ты вообще не в теме...
не ужели этот запрос не выдает ошибку?
(SELECT COUNT("user_messages.id") - наверно так COUNT("user_messages.id") AS count_messages
и еще...
знаю что в запросе еще наверно надо использовать join или group_by, но не знаю как правильно.
правильно это когда в гугле пишешь - mysql join
лично мне первым результатом дало - http://www.mysql.ru/docs/man/JOIN.html
рекомендую
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
06 Июль, 2011, 02:13:16 , спустя 3 часа 31 минуту 17 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
SELECT `from`, count(`id`) AS `cnt` FROM `user_messages` GROUP BY `from`
по полю from желательно индекс построить
|
|
|
|
|
Записан
|
|
|
|
|
Animator ↓
|
 |
|
06 Июль, 2011, 11:28:13 , спустя 9 часов 14 минут 57 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 3
Сообщений: 200 Сила слова: 1.5
|
джойнится все равно придется, что б имя пользователя вывести
по полю from желательно индекс построить
и по to и по status
|
|
|
|
|
Записан
|
|
|
|
|
wats ↓
|
 |
|
07 Июль, 2011, 03:30:21 , спустя 1 день 4 часа 2 минуты 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
не ужели этот запрос не выдает ошибку?
(SELECT COUNT("user_messages.id") - наверно так COUNT("user_messages.id") AS count_messages
не выдает, проверял в phpmyadmin
master, спасибо, выводит как раз ид того кто написал и сколько сообщений написал. Но вот к сожалению не знаю как здесь еще получить все данные написавшего из таблицы users. Подскажите пожалуйста.
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
Animator ↓
|
 |
|
07 Июль, 2011, 03:32:42 , спустя 2 минуты 21 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 3
Сообщений: 200 Сила слова: 1.5
|
джойнится все равно придется, что б имя пользователя вывести
|
|
|
|
|
Записан
|
|
|
|
|
wats ↓
|
 |
|
07 Июль, 2011, 03:51:57 , спустя 19 минут 15 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Animator, я понял что надо джойнится, но пока не знаю как правильно.
Вот master привел пример запроса, дак его надо использовать как подзапрос в основном запросе с джойном или нет?
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
Animator ↓
|
 |
|
07 Июль, 2011, 04:01:20 , спустя 9 минут 23 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
|
|
wats ↓
|
 |
|
07 Июль, 2011, 04:09:00 , спустя 7 минут 40 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Animator, я знаю как делаются запросы с джойном, не знаю как сделать именно в этом случаи, хватит уже ссылку на мануал показывать.
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
Animator ↓
|
 |
|
07 Июль, 2011, 04:27:34 , спустя 18 минут 34 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 3
Сообщений: 200 Сила слова: 1.5
|
SELECT `from`, count(`id`) AS `cnt` FROM `user_messages` GROUP BY `from`
теперь разовьем тему:
SELECT `users.*`, count(`um.id`) AS `cnt` FROM `user_messages` AS `um` INNER JOIN `users` AS `u` ON `um.from` = `u.id` WHERE `um.to` = %айди получателя% GROUP BY `um.from`
пишу от руки, возможны опечатки, не обессудьте :) Спустя 3 минуты 28 секунд добавил то есть, джойнишся по отправителю, а в условии фильтруешь по получателю, не забудь про индексы, и из таблицы users выгребай только то что нужно, потому как таблицы с сообщениями растут быстрее богатырей русских :)
ну и потом еще с портиционированием поэкспериментируй, хотя... это я уже больше себе на заметку :)
|
|
|
|
|
Записан
|
|
|
|
|
wats ↓
|
 |
|
07 Июль, 2011, 04:41:37 , спустя 14 минут 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Animator, спасибо, вот такой запрос тоже работает как надо, твой еще не тестил.
SELECT COUNT( "user_messages.id" ) AS cnt, users.id AS user_id, users.name AS user_name, users.email AS user_email
FROM user_messages
LEFT JOIN users ON users.id = user_messages.FROM
WHERE user_messages.TO =3
AND user_messages.STATUS =0
GROUP BY user_messages.FROM
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
Animator ↓
|
 |
|
07 Июль, 2011, 04:46:40 , спустя 5 минут 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 3
Сообщений: 200 Сила слова: 1.5
|
ай, молодец! справился таки сам :)
LEFT JOIN - тут зло, а в остальном наши запросі идентичні
и будь осторожнее с использованием названий типа - FROM
|
|
|
|
|
Записан
|
|
|
|
|
wats ↓
|
 |
|
07 Июль, 2011, 04:51:25 , спустя 4 минуты 45 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: -1
Сообщений: 142 Сила слова: -0.7
|
Animator, твой запрос тоже работает как надо
SELECT users . * , count( 'user_messages.id' ) AS cnt
FROM user_messages
INNER JOIN users ON user_messages.FROM = users.id
WHERE user_messages.TO =3
GROUP BY user_messages.FROM
Спустя 25 секунд добавил спасибо за помощь ) Спустя 2 минуты 9 секунд добавил твой запрос короче и получает все данные о пользователе из таблицы users)
|
|
|
|
|
Записан
|
обычный web-мастер
|
|
|
|
Animator ↓
|
 |
|
07 Июль, 2011, 04:53:53 , спустя 2 минуты 28 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 3
Сообщений: 200 Сила слова: 1.5
|
будь ласка :)
|
|
|
|
|
Записан
|
|
|
|
|
Sinkler ↓
|
 |
|
07 Июль, 2011, 05:59:34 , спустя 1 час 5 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Похуй, пляшем!
Группа: Джедаи Карма: 73
Сообщений: 6806 Сила слова: 1.07
|
такой необычный разговор для местных краев)))
|
|
|
|
|
Записан
|
|
|
|
|