Я пытаюсь подсчитать количество результатов, генерируемых каждым запросом, который запускается в приложении, которое мы создаем, эти запросы являются динамическими c и генерируются приложением, поэтому мы не можем контролировать синтаксис.
Эти запросы иногда оказываются очень тяжелыми, и нам нужно добавить ограничения перед их выполнением, но перед добавлением этих ограничений нам нужно знать окончательный счет.
Нам очень понравился способ получения количества строк каждого запроса без необходимости выполнения результатов:
Select count(*) from ($query) as q_count;
Где $query
- любой заданный динамический c запрос, сгенерированный приложением. Это прекрасно работает до тех пор, пока запрос не содержит соединение, а в двух таблицах соединения есть столбец с одинаковым именем.
Например, давайте представим таблицу CLIENTS с CLID (идентификатор клиента) и таблицу Invoices также с CLID (в качестве внешнего ключа)
Следующий запрос возвращает все номера счетов и имена клиентов:
SELECT * FROM CLIENTS LEFT JOIN INVOICES on CLIENTS.CLID = INVOICES.CLID
Но в тот момент, когда я пытаюсь их подсчитать, используя Select count(*) from ($query) as q_count
, где $query
это запрос выше, я получаю следующую ошибку:
select count(*) from (SELECT * FROM CLIENTS LEFT JOIN INVOICES on CLIENTS.CLID = INVOICES.CLID) as q_count
Ошибка:
Дубликат имени столбца 'CLID'
Я понимаю, почему это в приведенном выше примере я предполагаю, что CLID становится неоднозначным, и count (*) не может различить оба, мой вопрос о решении или способе его обойти, помните, что у меня нет контроля над запросами ( $query
)
Должен быть способ, потому что phpMyAdmin способен вычислять количество результатов без извлечения всех данных независимо от запроса.
Есть мысли?