У меня есть таблицы MySQL с данными, связанными с точками. как это:
tbl_user
tbl_earned_points
tbl_used_points
У меня есть запрос MySQL, который выбирает данные доступных точек. Это запрос:
SELECT
user.user_email_id AS userEmailId,
IFNULL(SUM(earn_points.earned_points),0) AS lifeTimePoints,
IFNULL((SUM(earn_points.earned_points) - (SELECT IFNULL(SUM(used_points.points_used),0) FROM tbl_used_points AS used_points WHERE used_points.user_id=earn_points.user_id)),0) AS availablePoints
FROM tbl_earned_points AS earn_points
RIGHT JOIN tbl_user AS user ON earn_points.user_id=user.user_id WHERE user.user_email_id <> '' AND user.user_email_id <> '0'
GROUP BY user.user_email_id
ORDER BY availablePoints ASC
Из вышеприведенного запроса я получаю все письма & результат как
userEmailId lifeTimePoints availablePoints
[email protected] 1745 1500
[email protected] 100 75
[email protected] 85 85
[email protected] 94 90
[email protected] 547 450
Моя проблема в том, что мне нужно только получить доступные строки от 80 до 99.
Так что мой запрос будет выглядеть как
userEmailId lifeTimePoints availablePoints
[email protected] 85 85
[email protected] 94 90
Просто добавьте это в ваше предложение WHERE:
AND availablePoints BETWEEN 80 AND 99
ты можешь использовать BETWEEN
пункт для availablePoints
, Установите свой availablePoints
что вы хотите.
По сути, вам просто нужно добавить WHERE
критерии. Однако вы также можете переписать свой запрос, чтобы удалить коррелированный подзапрос и просто использовать OUTER JOINs
:
SELECT u.user_email,
COALESCE(e.points,0) lifeTimePoints,
COALESCE(a.points,0) availablePoints
FROM tbl_user AS u
LEFT JOIN (
SELECT SUM(earned_points) points, user_id
FROM tbl_earned_points
GROUP BY user_id
) e ON u.user_id = e.user_id
LEFT JOIN (
SELECT SUM(points_used) points, user_id
FROM tbl_used_points
GROUP BY user_id
) a ON u.user_id = a.user_id
WHERE a.points between 80 and 99
Если вы предпочитаете использовать существующий запрос, вам нужно либо обернуть его в подзапрос и использовать псевдоним столбца (availablepoints
), или вам нужно будет использовать весь IFNULL
утверждение в вашем WHERE
критерии. Вы не можете ссылаться на псевдоним столбца напрямую.