[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка массива
Гость_Илья
Еще раз добрый день. Прошу помощи профессионалов в решении задачки.

Даю код:



$sth=@mysql_query("SELECT * FROM smf2_members WHERE last_login>='$t1'",$dbh); // Выводим активных пользователей за 5 дней
while ($row=@mysql_fetch_array($sth)) {
$u=$row[0];

$sth1=@mysql_query("SELECT COUNT(*) FROM smf2_messages WHERE id_member='$u' and poster_time>='$t1'",$dbh); // Считаем сколько сообщений за 5 дней они оставили
$row1=@mysql_fetch_array($sth1);
$k=$row1[0];

$content.="Пользователь: $row[1] Сообщений $k<br>";


}



Итог кода: Выводятся пользователи и количество сообщений нормально, нужно настроить сортировку по количеству сообщений. Проблема в том, что подсчет кол-ва сообщений происходит вторым действием и я не могу на $sth задать сортировку по $k. Помогите идеями. Спасибо всем за внимание



Спустя 11 минут, 46 секунд (11.12.2009 - 14:48) stepan написал(а):
Цитата (Гость_Илья @ 11.12.2009 - 11:37)
Проблема в том, что подсчет кол-ва сообщений происходит вторым действием

Встречный вопрос: а каким надо?
Честно - сложно рассказал о своей проблеме, нужен развернутый обзор.

Спустя 6 минут, 36 секунд (11.12.2009 - 14:55) Гость_Илья написал(а):
Да вроде все предельно просто рассказал. Что я могу еще сказать??? Код дал - рабочий. Ну давайте попробую полегче объяснить:

1 часть кода:
$sth=@mysql_query("SELECT * FROM smf2_members WHERE last_login>='$t1'",$dbh); // Выводим активных пользователей за 5 дней
while ($row=@mysql_fetch_array($sth)) {
$u=$row[0];


Вверху взяли всех пользователей которые заходили на форум за последнии 5 дней.

2 часть кода:
$sth1=@mysql_query("SELECT COUNT(*) FROM smf2_messages WHERE id_member='$u' and poster_time>='$t1'",$dbh); // Считаем сколько сообщений за 5 дней они оставили
$row1=@mysql_fetch_array($sth1);
$k=$row1[0];


Вверху посчитали сколько сообщений за 5 дней оставил на форуме каждый пользователь из 1 массива.

3 часть
$content.="Пользователь: $row[1] Сообщений $k<br>";


Вверху вывели пользователей и количества сообщений.

Задача: Что-то исправить что бы в 3 части программы пользователи сортировались по количеству сообщений и выводились

Спустя 1 час, 19 минут, 10 секунд (11.12.2009 - 16:14) Гость_Илья написал(а):
Что нету идей ни у кого????

Спустя 5 минут, 4 секунды (11.12.2009 - 16:19) glock18 написал(а):
Гость_Илья
да вообще сложно че-та.

почитай про order by

Спустя 2 минуты (11.12.2009 - 16:21) Гость_Илья написал(а):
В любом случае спасибки за внимание wink.gif

Спустя 11 минут, 56 секунд (11.12.2009 - 16:33) stepan написал(а):
Цитата (Гость_Илья @ 11.12.2009 - 11:55)
пользователи сортировались по количеству сообщений и выводились

Я так понял тебе надо 1 и 2 часть кода объединить, и вытягивать тех пользователей которых ты сначала отсортируешь с помощью ORDER BY и проверишь что эти пользователи заходили последние 5 дней

Спустя 1 час, 15 минут, 35 секунд (11.12.2009 - 17:49) Гость_Илья написал(а):
Мне надо вывести самых активных пользователей форума за 5 дней... А значит мне надо узнать кто заходил за 5 дней, сколько они оставили каждый сообщений за 5 дней и отсортировать по количеству сообщений... Мой код работает на все кроме последнего. Отлично вытягиваются люди, отлично считаются сообщения, но в конце выводятся по порядку массива, а мне нужно что бы они вывелись по количеству сообщений (т.е. кто больше написал тот и на верху списка) Вот задачка моя =)

Моя проблемма в том что нужно сначала вытянуть пользователей а потом считать сообщения и я просто не могу поставить в 1 часть ORDER BY потому что кол-во сообщений еще не известно. Щас я пробую добавить третий массив. Тоесть план моих действий таков:

1) Вытягиваем пользователей зашедших за 5 дней
2) Считаем сообщения
3) Снова вытягиваем пользователей за 5 дней но добавляем сортировку по колву сообщений
4) выводим список.


План вроде логичный, но пока не получается осуществить

Спустя 4 часа, 52 минуты, 35 секунд (11.12.2009 - 22:41) sergeiss написал(а):
Всё это можно сделать одним-единственным, но сложным запросом smile.gif Вот только тут проблема в том, что я могу написать его для Постгре, но не смогу для MySQL.

Спустя 34 минуты, 40 секунд (11.12.2009 - 23:16) twin написал(а):
Цитата
План вроде логичный, но пока не получается осуществить

Не логичный план... Вот примерно так надо пытаться:
1) вытягиваем считаем пользователей за 5 дней но добавляем сортировку сортируя по колву сообщений. Одновременно считаем сообщения.
2) выводим список.

Спустя 2 дня, 11 часов, 43 минуты, 11 секунд (14.12.2009 - 10:59) Гость_Илья написал(а):
twin

Здорово конечно написал, но как выполнить пункт 1 твоего плана, если мы не можем отсортировать по количеству сообщений пользователей, так как количество сообщений считается в другой таблице, после вытягивания id пользователей, а следовательно подсчет сообщений производится только во втором действии? Поясни подробнее, может ты прав, но только не вижу средств выполнить твой план

Спустя 23 минуты, 20 секунд (14.12.2009 - 11:23) VolCh написал(а):
Запрос что-то вроде

SELECT id, name, count(*) AS cnt FROM smf2_members JOIN smf2_messages ON smf2_messages.id_member = smf2_members.id GROUP BY id WHERE last_login >= NOW()-5 ORDER BY cnt

Возможно надо использовать не WHERE, а HAVING, а может и оба smile.gif

P.S. Уважайте себя, используйте ассоциативные массивы при выборке из базы или у вас сплошь хайлоад проекты, где каждая микросекунда дорога? wink.gif

Спустя 38 минут, 12 секунд (14.12.2009 - 12:01) Ilya_21 написал(а):
Цитата (VolCh @ 14.12.2009 - 08:23)
Запрос что-то вроде

SELECT id, name, count(*) AS cnt FROM smf2_members JOIN smf2_messages ON smf2_messages.id_member = smf2_members.id GROUP BY id WHERE last_login >= NOW()-5 ORDER BY cnt

Возможно надо использовать не WHERE, а HAVING, а может и оба smile.gif

P.S. Уважайте себя, используйте ассоциативные массивы при выборке из базы или у вас сплошь хайлоад проекты, где каждая микросекунда дорога? wink.gif

Здорово конечно идею описал. Использовать 1 запрос для двух действий, но мог и по проще что-нибудь придумать, а теперь придется весь мануал перекапывать =)

Спустя 1 минута, 41 секунда (14.12.2009 - 12:02) Ilya_21 написал(а):
Цитата (sergeiss @ 11.12.2009 - 19:41)
Всё это можно сделать одним-единственным, но сложным запросом smile.gif Вот только тут проблема в том, что я могу написать его для Постгре, но не смогу для MySQL.

Да, я в выходные уже подумал над этим вопросом и понял, что нужно один запрос писать, только вот я так ни разу не делал, придется все изучать =)
Быстрый ответ:

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