Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

выбор топа в Php???

382
28 мая 2004 года
dodger
164 / / 07.02.2003
Есть база такой структуры:
id,nickname,score. id - autoincrement, nickname - может повторяться сколько угодно, при этом будут разные score. Как сделать sql-запрос, чтобы выбирались, допустим 10 лучших по score? Я представляю это следующим образом:
 
Код:
select distinct * from .....order by score ASC limit 10

Правильно или нет???
4
28 мая 2004 года
mike
3.7K / / 01.10.2002
 
Код:
SELECT nickname,sum(score)
FROM table
GROUP BY nickname
ORDER BY 2 DESC
382
29 мая 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by mike
 
Код:
SELECT nickname,sum(score)
FROM table
GROUP BY nickname
ORDER BY 2 DESC


А лимитация количества записей??? Limit то все таки нужен наверное???

4
29 мая 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by dodger
А лимитация количества записей??? Limit то все таки нужен наверное???



Нужен, так добавь :)

382
29 мая 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by mike


Нужен, так добавь :)


Ок, добавлю :D
Кстати, а почему ты убрал из моего варианта DISTINCT?? Ведь он вроде удаляет повторяющиеся записи. Или я не прав?

4
31 мая 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by dodger

Ок, добавлю :D
Кстати, а почему ты убрал из моего варианта DISTINCT?? Ведь он вроде удаляет повторяющиеся записи. Или я не прав?



GROUP BY сгруппирует все записи по nickname, то есть объяденит все поля где nickname одинаков, а групповая функция SUM сложет все сгруппированые значение score.

382
31 мая 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by mike
GROUP BY сгруппирует все записи по nickname, то есть объяденит все поля где nickname одинаков, а групповая функция SUM сложет все сгруппированые значение score.


Т.е. если имеются записи на имя dodger, допустим:
|nickname|score|
|dodger |24 |
|sash |35 |
|dodger |44 |

то после этого запроса в выводе будет:
dodger 68

так? мне как раз нужно, чтобы была сделана выборка и взят максимальный результат.....поэтому, как мне кажется нужен distinct...или как выяснить максимальный результат еще?

283
31 мая 2004 года
Alone
910 / / 20.11.2002
очень рекомендую урл
http://dev.mysql.com/doc/mysql/ru/index.html
там можно скачать всю доку в архиве

а вообще это делается так:
SELECT nickname,max(score)
FROM table
GROUP BY nickname
ORDER BY 2 DESC
4
31 мая 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by dodger
так? мне как раз нужно, чтобы была сделана выборка и взят максимальный результат.....поэтому, как мне кажется нужен distinct...или как выяснить максимальный результат еще?



Alone правильно сказал, испольуй MAX а не SUM. Да и RTFM.

382
31 мая 2004 года
dodger
164 / / 07.02.2003
Сделал по твоему запросу - ничего не выводит. Сделал по своему - выводит, но только не делает выборку - где больше score, а группирует по имени и выводит подряд. Как сделать, чтобы выбирал максимально количество score для данного nickname и выводил?
Мой запрос был такой:
 
Код:
SELECT nickname, score FROM HISCORE_TABLE GROUP BY nickname ORDER BY score DESC limit 10
382
31 мая 2004 года
dodger
164 / / 07.02.2003
Все, со всем разобрался. Осталось только одно. .допустим, что у меня записи лимитированы, т.ы. выводится 10 записей в таблице....а человек, который ищет себя в рейтинге находится на 27...как сделать так, чтобы выводились первые 10, а потом типа многоточие и только его 27 место????типа
1 вася 1000
2 коля 90
3 саша 70
.........
27 юля 1

как???с помощью запроса или PHP???
382
01 июня 2004 года
dodger
164 / / 07.02.2003
Неужели никто не наведет на путь истинный??? Я просто не очень понимаю, как можно проверить есть нужный мне логин в выборке или нет? В какой переменной после запроса находится выборка?
Цитата:
Originally posted by dodger
Все, со всем разобрался. Осталось только одно. .допустим, что у меня записи лимитированы, т.ы. выводится 10 записей в таблице....а человек, который ищет себя в рейтинге находится на 27...как сделать так, чтобы выводились первые 10, а потом типа многоточие и только его 27 место????типа
1 вася 1000
2 коля 90
3 саша 70
.........
27 юля 1

как???с помощью запроса или PHP???

4
01 июня 2004 года
mike
3.7K / / 01.10.2002
Я так думаю, чтобы определить место придется делать выборку всех и искать средсвами PHP.
382
01 июня 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by mike
Я так думаю, чтобы определить место придется делать выборку всех и искать средсвами PHP.


Я тоже после нескольких попыток сделать все через запрос понял, что придется делать на PHP. Но, не могу понять одной вещи, после того как мы сделали запрос делаем следующее:

 
Код:
$out=mysql_fetch_row($result)

Понятное дело, что так мы создаем массив (или я не прав?) из данных, полученных в результате запроса.
В РНР есть такая функция как in_array(), которая ищет по шаблону необходимый элемент массива. Допустим in_array("dodger",$out) и выдают TRUE или FALSE соответственно. НО!!! Складывается такое ощущение, что в массиве присутствует только первая запись из запроса!!! Точнее, так оно и есть...но почему???
Если создать массив таким образом
 
Код:
$languages=array("English","Greek","Spanish");
и провести в нем поиск, то все идет правильно, а при работе с массивом $out - в нем хранится только первый элемент из выборки. Я так думаю, что не правильно создаю массив из запроса. Как сделать массив правильно???
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог