Используйте OR
или UNION ALL
:
SELECT *
FROM mytable
WHERE date = NOW() OR date = NOW() - INTERVAL 1 DAY
SELECT *
FROM mytable
WHERE date = NOW()
UNION ALL
SELECT *
FROM mytable
WHERE date = NOW() - INTERVAL 1 DAY
Обновление:
Если вам нужны три набора результатов, вам понадобятся три запроса, а если у вас три запроса, у вас будет три SELECT
списка.
Вы можете составлять свои запросы в приложении (вы создаете список SELECT
один раз и просто добавляете условие WHERE
).
Кроме того, вы можете получить все в одном запросе и проанализировать результаты на клиенте:
SELECT 1 AS resultset,
t1.customer_id, t1.name, t2.dtime, t6.band_type, t7.dop, t5.lun, t2.rpt
FROM
customer AS t1
Inner Join report AS t2 ON t1.customer_id = t2.customer_id
Inner Join employee AS t5 ON t5.employee_id = t2.employee_id
Inner Join band_type AS t6 ON t6.band_type_id = t2.band_type_id
Inner Join dop AS t7 ON t7.dop_id = t2.dop_id
WHERE
t2.rpt_type = 'daily' AND
t2.tmstamp >= date_sub(curdate(), interval 1 month) AND
t2.tmstamp <= curdate() AND
t1.customer_id = ''
UNION ALL
SELECT 2 AS resultset,
t1.customer_id, t1.name, t2.dtime, t6.band_type, t7.dop, t5.lun, t2.rpt
FROM
customer AS t1
Inner Join report AS t2 ON t1.customer_id = t2.customer_id
Inner Join employee AS t5 ON t5.employee_id = t2.employee_id
Inner Join band_type AS t6 ON t6.band_type_id = t2.band_type_id
Inner Join dop AS t7 ON t7.dop_id = t2.dop_id
WHERE
t2.tmstamp >= '$date 00:00:00' AND
t2.tmstamp <= '$date 23:59:59' AND
t1.customer_id = '' AND
t2.deleted = '0'
SELECT 3 AS resultset,
t1.customer_id, t1.name, t2.dtime, t6.band_type, t7.dop, t5.lun, t2.rpt
FROM
customer AS t1
Inner Join report AS t2 ON t1.customer_id = t2.customer_id
Inner Join employee AS t5 ON t5.employee_id = t2.employee_id
Inner Join band_type AS t6 ON t6.band_type_id = t2.band_type_id
Inner Join dop AS t7 ON t7.dop_id = t2.dop_id
WHERE
t2.stamp >= date_sub(now(), interval 1 day) AND
t1.customer_id = '' AND
t2.band_type = '' AND
t2.deleted = '0'
Здесь все 3
наборов результатов возвращаются как один набор результатов с дополнительным полем (resultset
), которое позволяет различать их.
Конечно, вы также можете создать вид, подобный этому:
CREATE VIEW v_customers AS
SELECT t1.customer_id, t1.name, t2.dtime, t6.band_type, t7.dop, t5.lun, t2.rpt
FROM
customer AS t1
Inner Join report AS t2 ON t1.customer_id = t2.customer_id
Inner Join employee AS t5 ON t5.employee_id = t2.employee_id
Inner Join band_type AS t6 ON t6.band_type_id = t2.band_type_id
Inner Join dop AS t7 ON t7.dop_id = t2.dop_id
SELECT *
FROM v_customers
WHERE
t2.rpt_type = 'daily' AND
t2.tmstamp >= date_sub(curdate(), interval 1 month) AND
t2.tmstamp <= curdate() AND
t1.customer_id = ''
и т. Д., Но вам все равно потребуется скопировать список выбора.
P. S.
Что именно вы хотите оптимизировать? Компьютеры в наше время очень хороши в копировании строк.