SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.06.2012 23:38:38

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Сортировка данных по количеству строк в другой таблице

Здравствуйте есть 2 таблицы user и messages
Поля:
user - id, name, phone, status
messages - id, id_user, message, status

В таблице USER есть 3 пользователя id 1, id 2, id 3
В таблице MESSAGES 5 сообщении 2 сообщения от id_user 3
и 3 сообщения от id_user 1
По идее должно вывести так 1, 3, 2

Нужно отсортировать таблицу user ко католичеству сообщений каждого пользователя то есть по id, связи между таблицами id и id_user

Я попытался составить запрос но получилось не корректно выводит только 1 id пользователя а не 3 как должно быть.
Помогите составить запрос.
МОЙ запрос:


$result = mysql_query ("SELECT *, count(" . DB_PREFIX . "messages.id_user) FROM `" . DB_PREFIX . "user` JOIN `" . DB_PREFIX . "messages` ON " . DB_PREFIX . "user.id=" . DB_PREFIX . "messages.id_user WHERE " . DB_PREFIX . "user.status!='0' AND " . DB_PREFIX . "user.status!='4' ORDER BY " . DB_PREFIX . "messages.id_user DESC");

                                           
if (mysql_num_rows ( $result ) != 0) {
    for ( $i = 0; $i < mysql_num_rows ( $result ); $i++ ) {
        $user_list = mysql_fetch_assoc ( $result );
               
        echo "" . $user_list ['id'] . "<br />";
    }
}
 

Неактивен

 

#2 04.06.2012 00:01:54

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сортировка данных по количеству строк в другой таблице

select u.id, u.name, u.phone, u.status, count(id_user) from `user` u left join messages m on u.id=m.id_user group by 1,2,3,4 order by 5 desc;
 

Неактивен

 

#3 04.06.2012 01:04:21

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Сортировка данных по количеству строк в другой таблице

vasya написал:

select u.id, u.name, u.phone, u.status, count(id_user) from `user` u left join messages m on u.id=m.id_user group by 1,2,3,4 order by 5 desc;
 

На примере вашего примера маленько изменив составил запрос он выводит все id ы пользователей но выводит их не так как нужно он так и не сортирует их по количеству сообщений в таблице messages.
Что я сделал не так?

$result = mysql_query ("SELECT " . DB_PREFIX . "user.id, count(" . DB_PREFIX . "messages.id_user) FROM `" . DB_PREFIX . "user` LEFT JOIN `" . DB_PREFIX . "messages` ON " . DB_PREFIX . "user.id=" . DB_PREFIX . "messages.id_user WHERE " . DB_PREFIX . "user.status!='0' AND " . DB_PREFIX . "user.status!='4' GROUP BY " . DB_PREFIX . "user.id ORDER BY " . DB_PREFIX . "messages.id_user DESC");
   
if (mysql_num_rows ( $result ) != 0) {
    for ( $i = 0; $i < mysql_num_rows ( $result ); $i++ ) {
        $id_user = mysql_result ( $result, $i );
               
        echo "" . $id_user . "<br />";
    }
}

Отредактированно gheka (04.06.2012 01:06:21)

Неактивен

 

#4 04.06.2012 01:20:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сортировка данных по количеству строк в другой таблице

Потому что вы сортируете по messages.id_user, а не по кол-ву сообщений.

Неактивен

 

#5 04.06.2012 01:29:11

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Сортировка данных по количеству строк в другой таблице

vasya написал:

Потому что вы сортируете по messages.id_user, а не по кол-ву сообщений.

Поставил так но ничего не изменилось всё равно не сортирует

count(" . DB_PREFIX . "messages.message)
и
ORDER BY " . DB_PREFIX . "messages.message) DESC"

Отредактированно gheka (04.06.2012 01:30:23)

Неактивен

 

#6 04.06.2012 01:38:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сортировка данных по количеству строк в другой таблице

Кол-во сообщений пользователя это count(messages.id_user) - по этому значению и нужно сортировать.

Неактивен

 

#7 04.06.2012 01:45:22

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Сортировка данных по количеству строк в другой таблице

vasya написал:

Кол-во сообщений пользователя это count(messages.id_user) - по этому значению и нужно сортировать.

Спасибо за ответы.
Не в этом дело решил проблему таким методам.
Дописал:

count(" . DB_PREFIX . "messages.message) AS `count`
и
ORDER BY `count` DESC"

Полный запрос может кому пригодится:



$result = mysql_query ("SELECT " . DB_PREFIX . "user.id, count(" . DB_PREFIX . "messages.message) AS `count` FROM `" . DB_PREFIX . "user` LEFT JOIN `" . DB_PREFIX . "messages` ON " . DB_PREFIX . "user.id=" . DB_PREFIX . "messages.id_user WHERE " . DB_PREFIX . "user.status!='0' AND " . DB_PREFIX . "user.status!='4' GROUP BY " . DB_PREFIX . "user.id ORDER BY `count` DESC");
   
if (mysql_num_rows ( $result ) != 0) {
    for ( $i = 0; $i < mysql_num_rows ( $result ); $i++ ) {
        $id_user = mysql_result ( $result, $i );
               
        echo "" . $id_user . "<br />";
    }
}

 

Неактивен

 

#8 04.06.2012 20:26:20

gheka
Участник
Зарегистрирован: 17.05.2012
Сообщений: 9

Re: Сортировка данных по количеству строк в другой таблице

Есть ещё вопрос по этому запросу как этому запросу добавить сортировку по типу сообщений то есть
в таблице MESSAGES добавлено поле type которое равняется 0 или 1
0 - не прочитано
1 - прочитано

Что нужно добавить к запросу чтобы в первую очередь выводились id пользователей с type = 1 а потом уже остальные?

Неактивен

 

#9 04.06.2012 21:48:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сортировка данных по количеству строк в другой таблице

.. order by column1 desc, colum2 ..

http://dev.mysql.com/doc/refman/5.5/en/select.html

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson