Я не совсем уверен, что я здесь делаю неправильно.Самый эффективный MySQL-запрос для не существует и сумма
У меня есть этот запрос, где я хочу получить u.id
, если пользователь имеет заданное количество часов регистрации и не имеет зарегистрированного увеличения зарплаты. В этом случае только 1
должен быть выход, потому что не зарегистрировано ни одного rate_custom
и num_hours
больше, чем custom_hours
, который 1000
Это то, что я до сих пор , но я пробовал части этого без везения, так что мне просто интересно, есть ли более быстрый и эффективный способ справиться с этим, и тот, который действительно работает?
"SELECT u.id "
. "FROM users u "
. "LEFT JOIN user_hours uh "
. "ON u.id = uh.user_id "
. "LEFT JOIN rate_custom rc "
. "ON u.id = rc.user_id "
. "WHERE "
. "NOT EXISTS (r.crate_id FROM rate_custom r WHERE r.date_added <= NOW() AND r.date_ended IS NULL AND r.user_id = u.id) "
. "GROUP BY u.id "
. "HAVING SUM(("
. "SELECT (THE NUM HOURS WHERE HOUR STATUS IS 4) "
. ")) >= ("
. "SELECT rcc.custom_hours FROM rate_custom rcc WHERE rcc.date_ended IS NULL ORDER BY rcc.crate_id DESC LIMIT 1"
. ")";
Я думаю, что это сработало! Я вернусь к нему, как только полностью его выполнит. Как это будет работать для 100K записей в каждой таблице? – PhyCoMath
@GjertIngarGjersund. , , Предполагая, что у вас есть индексы для ключей для объединений, «группа by» будет лимитирующим фактором в производительности. –