У меня есть MySQL таблица test со столбцами: id(int) | name(string) | money(int)
В ней есть неопределенное кол-во записей и нужно сделать что-то вроде топа.
Нужно узнать: На каком месте находится пользователь с id = 228
PHP
Как узнать положение элемента в базе данных?
узнали сколько у него денег
SELECT test.money FROM test WHERE test.id=228
а теперь применим это в запросе сколько пользователей имеет больше денег
SELECT COUNT(*) as nTop FROM test WHERE test.money > ( SELECT money FROM test WHERE id=228 )
знаичт его (и тех, у кого столько же денег) место
nTop + 1
===
А еще можно решить эту задачу с помощью VIEW, где какой-то столбец будет отвечать за место, но будет очень-очень медленно, зато правильнее, чем кешировать результат. Собственно, этот VIEW и надо будет копировать (=такая реализация кеширования, средствами mysql) в таблицу раз в * минут.
SELECT test.money FROM test WHERE test.id=228
а теперь применим это в запросе сколько пользователей имеет больше денег
SELECT COUNT(*) as nTop FROM test WHERE test.money > ( SELECT money FROM test WHERE id=228 )
знаичт его (и тех, у кого столько же денег) место
nTop + 1
===
А еще можно решить эту задачу с помощью VIEW, где какой-то столбец будет отвечать за место, но будет очень-очень медленно, зато правильнее, чем кешировать результат. Собственно, этот VIEW и надо будет копировать (=такая реализация кеширования, средствами mysql) в таблицу раз в * минут.
Владислав Рязанцев
Спасибо)
Для этого вам надо использовать т. н. indexes (индексы, скорее всего так по-русски).
Они как раз используются для ускорения операций сортировки по какому-то полю (в вашем случае по полю "Money").
Пример-аналогия из реальной жизни, чтоб вам было понятнее:
Вы пришли в большую ленинскую библиотеку и хотите прочитать какую-то определенную книжку.
Вы идете в каталог и там по имени автора находите нужную книжку, узнаете, в каком шкафу и на какой полке она стоит. Идете и читаете ее.
Здесь вся ленинская библиотека - это база данных с неопределенным количеством элементов.
Каталоги с карточками книг - это и есть индекс по какому-то полю.
Без каталога с карточками вам бы пришлось перерывать последовательно все шкафы и полки, пока не найдете искомую книгу (ну или не найдете).
Они как раз используются для ускорения операций сортировки по какому-то полю (в вашем случае по полю "Money").
Пример-аналогия из реальной жизни, чтоб вам было понятнее:
Вы пришли в большую ленинскую библиотеку и хотите прочитать какую-то определенную книжку.
Вы идете в каталог и там по имени автора находите нужную книжку, узнаете, в каком шкафу и на какой полке она стоит. Идете и читаете ее.
Здесь вся ленинская библиотека - это база данных с неопределенным количеством элементов.
Каталоги с карточками книг - это и есть индекс по какому-то полю.
Без каталога с карточками вам бы пришлось перерывать последовательно все шкафы и полки, пока не найдете искомую книгу (ну или не найдете).
если нужен топ, то
SELECT
*
FROM
test
ORDER BY
money DESC,
name
если нужно положение в этом топе конкретно id=228, то
SELECT
count(*)
FROM
test a
JOIN test b ON b.id = 228
WHERE
a.money > b.money
or (a.money=b.money and a.name <= b.name)
наверно как-то так.
SELECT
*
FROM
test
ORDER BY
money DESC,
name
если нужно положение в этом топе конкретно id=228, то
SELECT
count(*)
FROM
test a
JOIN test b ON b.id = 228
WHERE
a.money > b.money
or (a.money=b.money and a.name <= b.name)
наверно как-то так.
Владислав Рязанцев
Благодарю
Очевидно, на 228 месте?))
Владислав Рязанцев
Логично, но не то, что задумывалось
Похожие вопросы
- Отправка текста в базу данных PHP + MySQL! Помогите ((
- вывод данных из базы данных по нажатию кнопки
- как сделать чтобы полученные из формы данные записывались в базу данных?
- При написании php кода для отправки записи в базу данных выходит ошибка
- Как хранить номер карты в базе данных?
- Не вносятся данные в базу MYSQL, в чём ошибка?
- Почему говорят про глобальный массив $GLOBALS в то же время данные передают через сессии?
- Нужна помощь c запросами и базой данных, PHP, MySQL
- Как проще, лучше и быстрее из бд получить данные и поместить сразу в переменную или поместить в цикл и оттуда извлекать
- PHP не видит данных POST запроса