2015-01-26 2 views
0

У меня есть таблица для хранения игроков с этой схемойВыбор нового уровня - SQL

id_person name level experience 

И таблицей, которая хранит уровень и очки опыта игрок нужно иметь, чтобы быть в таком уровне

level points_experience 

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

Рассмотрим пример

level points_experience 
1  100 
2  200 
3  400 
4  900 
5  2000 

Если человек имеет 250 опыта, он в настоящее время в уровне 2. Если он получает 1800 очков убийства существо, я хотел бы запрос, чтобы сказать мне, что 5-го уровня, что Я должен использовать в обновлении. База данных: MySQL

+2

Я не понимаю, почему вы храните «уровень» в таблице «человек». Если существует прямая связь между «опытом» и «уровнем», то хранения всего опыта должно быть достаточно, и вы должны получить уровень, присоединившись к этой таблице, а не запускать постоянное обновление этого значения – Lamak

+0

Хорошая точка. Я подумаю об этом. Есть больше материала помимо этого взаимодействия, которое мне, возможно, придется изменить, чтобы делать то, что вы говорите. – gbvisconti

ответ

1

Запрос вам нужно:

SELECT level 
FROM experience_levels      # put the correct table name 
WHERE points_experience < (250+1800)  # put the actual value here 
ORDER BY points_experience DESC 
LIMIT 1 

Что произойдет, если пользователь имеет менее 100 очков опыта? Вы должны добавить дополнительную строку с points_experience = 0 или обработать этот случай из вашего кода клиента (запрос выше не вернет ни одной строки) или убедитесь, что он никогда не произойдет.

Если вам нужен уровень добавлен к пользовательской информации, то вы можете JOIN таблицы

SELECT p.*, IFNULL(l.level, 0) AS level 
FROM players p 
    LEFT JOIN experience_levels l ON l.points_experience < p.experience 
WHERE p.id_person = 123    # put the correct ID here 
ORDER BY l.points_experience DESC 
LIMIT 1 

Для игроков, имеющих менее 100 очков опыта, этот запрос должен возвращать 0 в level колонке.

+0

Большое спасибо. На самом деле это довольно просто. У меня уровень для нулевого опыта, вопрос был упрощен :) – gbvisconti

Смежные вопросы