вопрос сформулирован неясно, но из контекста, похоже, вы ищете самый высокий уровень, который достиг человек g при их текущем exp и min_exp.
Поскольку вы знаете, идентификатор пользователя, которого вы ищете, запрос может быть
select users.id as uid,users.exp,levels.id as levelid from users,levels where users.id = 4 and levels.min_exp <= users.exp order by levelid desc limit 1
, если вы убедитесь, что у вас есть соответствующие индексы на обеих таблицах
alter table users add primary key (id)
alter table levels add primary key (id)
alter table levels add unique key(min_exp);
(не первичный ключ индексы бы тоже хорошо) Тогда запрос является чрезвычайно эффективным:
explain select users.id as uid,users.exp,levels.id as levelid from users,levels where users.id = {{uid}} and levels.min_exp <= users.exp order by levelid desc limit 1;
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 | |
| 1 | SIMPLE | levels | index | min_exp | PRIMARY | 4 | NULL | 1 | Using where |
----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+`
Я не совсем понимаю, о чем вы спрашиваете. Можете ли вы изменить свой вопрос и представить пример ожидаемого результата? – Todd
Есть ли level_id в вашей пользовательской таблице? –
Предоставьте информацию о том, в каких столбцах эти таблицы должны быть объединены, потому что в таблице «levels» нет столбца, который может использоваться для соединения с «пользователями». – piotrekkr