У вас есть ненужный and <=
. Вы хотите, либо between
или два сравнения:
Select user_email
from wp_users u
where ID in (select um.user_id
from wp_usermeta um
where um.meta_key = 'last_login' and
CAST(um.meta_value As DATE) >= '2000-01-06' and
CAST(um.meta_value As DATE) <= '2016-01-06'
);
Часто join
s лучше, чем in
. Если last_login
появляется только один раз для каждого пользователя, вы можете попробовать:
Select u.user_email
from wp_users u join
wp_usermeta um
on u.id = um.user_id
where um.meta_key = 'last_login' and
CAST(um.meta_value As DATE) >= '2000-01-06' and
CAST(um.meta_value As DATE) <= '2016-01-06';
Затем, если дата хранится в виде YYYY-MM-DD, то бросок не нужен (сравнение в виде строк работы):
Select u.user_email
from wp_users u join
wp_usermeta um
on u.id = um.user_id
where um.meta_key = 'last_login' and
um.meta_value >= '2000-01-06' and
um.meta_value <= '2016-01-06';
Наконец, эта версия может воспользоваться индексом на wp_usermeta(meta_key, meta_value, user_id)
.
Также взгляните на соединения. – Strawberry