![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| fuckerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Здравтсвуйте.
Есть таблица где записываются статистика юзеров о посещаемости. структура примерно такая nick email today week total today - это поинты за сегодня week - поинты за неделю total - общее кол-во поинтов юзера. Есть скрпит который хочется переписать для его быстродейсвия. Скрипт показывает места юзеров, тоесть, например: сегодня 10 самых понтовых это такие-то. Вот запрос как примерно вывести лутшую десятку.
Это не сложно. Сложность состаит в том, что юзер может не находится на первом листе, или даже на втором (В листе у меня по 10 юзеров, тоесть на первом листе места от 0 да 9 на втором листе от 10 да 19, и тд) И вот тогда приходится пользоватся поиском, который я так и не смог нормально написать. Я делаю так: Копирую всех юзеров в массив и начинаю искать ник уже в массиве, но это очень долгий процесс потому-что кол-во юзеров перевалило за 10 тысяч. Именно таким способом я могу узнать на каком месте неходится юзер, если я просто начну искать его в sql базе, то я его найду, но не узнаю на каком он месте, а мне важно именно это. Мне нужно составить запрос примерно следущего содержания: Вывисти номер поля юзера под ником='лол' при сортирове -today; Или может кто-нибудь подскажет другую идею... --------------------
|
|||
|
||||
| Mont |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 274 Регистрация: 13.11.2004 Где: Altay Репутация: 2 Всего: 12 |
а если двумя запросами?
Вот думаю так должно получиться -------------------- "Если однажды Вдруг Меня не окажется вовсе в заповедной заветной тарелке Твоего праведного сновидения Знай - Неуловимые мстители настигли меня." © Егор Летов |
|||
|
||||
| Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 2 Всего: 55 |
Ты сначала отдельно посчитай на какой странице юсер, и потом показывай ту страницу.
|
|||
|
||||
| fuckerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Mont
Спасибо, это выход, хотя хотелось бы в один запрос, но сойдёт и так. Opik Да вообщем я никогда этот sql не любил, вообще какой-то он левый язык. Особенно бесит, что там нет чего-нить наподобе while Так бы SELECT COUNT(*) FROM users WHILE nick!='lol' ORDER BY -today; Вообще, у меня складывается мнение, что sql придумал человек с садоМазахистскими наклонностями. --------------------
|
|||
|
||||
| Bikutoru |
|
||||||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
Попрошу без наездов на SQL. Твоя задача может быть целиком на нём решена, между прочим
По-моему, довольно красивое решение. 7 запросов, два из которых (2 и 3 с конца) могут быть внесены в последний, и приведены отдельно они для большей удобочитаемости. Данные, возвращаемые всеми запросами кроме последнего, перебирать не нужно. Для нормальной работы вот такой штуки
нужен MySQL 4 версии. И все - задача решена. Так что не возводи напраслину на SQL, а учи его лучше. А насчет того, что нет while'ов - так в TransactSQL (MS SQL Server) и вроде бы в PL/SQL (Oracle) он есть. Если они тебе так уж нужны - переходи на одну из этих СУБД. P.S. Рекомендую прочитать Хювяннен, Сеппяннен "Язык программирования LISP" - очень здорово учит мыслить не циклами и последовательно выполняющимися операторами... Это сообщение отредактировал(а) Bikutoru - 21.7.2005, 18:20 -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
||||||
|
|||||||
| fuckerok |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Да, тут оба способа работают, но это при условии, что у юзера уникальное кол-во поинтов!
А вот в моей базе сложилось так, что у Васи, Пети, Маши и тд по 30 поинтов. Тогда подобные способы не подходят. Я конечно пробовал манипулировать ещё и с ником, но ничего не вышло. Может есть какие-нибудь идеи... А то я всё тыкал и тыкал, но решения в этоге и не получил. Как бы было всё просто, если бы был while Надо сделать таким макаром чтобы запрос типа
Завершался, если ник='вася'
MS SQL Server - напрягает этот M$, ОС зависимая программа. Oracle я бы может и попробовал, но у хостера только mysql, тогда ставить и на лакальную машину и писать что-то под oracle нет смысла. Да и вообщем while нужен только для этого случая. Восновном у меня простые запросы. --------------------
|
||||
|
|||||
| Bikutoru |
|
||||||||||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
Видно плохо манипулировал...
Под свой вариант, думаю, перепишешь... А вообще-то нужно учиться мыслить, ибо именно это должно быть основным качеством программиста, а не умение набивать код и даже не знание языка и библиотек (боюсь, сейчас в меня полетят порченные овощи и фрукты).
А SELECT ... FROM ..., по сути дела, тот же while (точнее foreach, но с большими возможностями) и есть.
Зато какие там возможности
Oracle для простых смертных не дают Это сообщение отредактировал(а) Bikutoru - 23.7.2005, 12:07 -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
||||||||||
|
|||||||||||
| fuckerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Bikutoru
Вроде работает. Спасибо.
Ну я то смог осмыслить как решать эту проблему, но из-за поскудного знания sql я решить её без помощи не смог. С меня плюсы. --------------------
|
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 2 Всего: 22 |
Ловлю на слове А SQL учи - полезная вещь. Это сообщение отредактировал(а) Bikutoru - 24.7.2005, 10:26 -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| fuckerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Вот тока щас сто сообщений набралось
Bikutoru ++ --------------------
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |