Хорошо, у меня есть запрос
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
LIMIT 0, 30
, и я буду запускать то же самое, используя COUNT(*)
без ограничений
(SELECT COUNT(*) FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT COUNT(*) FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT COUNT(*) FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
По сути, я хотел бы получить общее количество результатов (без ограничения), а также получить ограниченный список.
Проблема, с которой я столкнулся, заключается в том, что при выполнении запроса на подсчет я получаю большее число, чем возвращаемые результаты. Я предполагаю, что причина этого в том, что когда я получаю результаты обратно, он отфильтровывает все перекрывающиеся строки, где подсчет учитывает только каждую, так как я должен вручную добавить их.
Есть идеи, как очистить весь этот процесс?
Также обратите внимание, что число операторов select изменяется динамически, но я надеялся, что есть способ получить общее количество, учитывающее дубликаты.
Спасибо.