2016-10-08 2 views
0

У меня есть этот SQL-запрос:Count (*) из запроса, имеющего LIMIT

SELECT users.*, users_oauth.* FROM users LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id WHERE (
(MATCH (user_email, user_firstname, user_lastname) AGAINST ('"+smith "+john"' IN BOOLEAN MODE))) 
ORDER BY user_date_accountcreated DESC LIMIT 0,50 

Есть ли способ, чтобы получить COUNT(*) этого запроса, игнорируя LIMIT 0,50 в этом же запросе? Или мне нужно сделать 2 запроса, один для результатов, один для COUNT (*)?

Спасибо.

+1

Я полагаю, вы можете поместить все в одном запросе, добавив подзапрос для счет(). Но внутренне он будет открывать таблицу дважды. Вы пытаетесь создать страницу вывода? – derloopkat

+1

Вы ищете 'SQL_CALC_FOUND_ROWS'. См. Http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows. –

ответ

1

Если ваша версия MariaDB 10.2.0+, тогда функции окна поддерживается и вы можете использовать COUNT(*) OVER():

SELECT 
    users.*, 
    users_oauth.*, 
    COUNT(*) OVER() AS countall 
FROM users 
LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id 
WHERE 
    MATCH (user_email, user_firstname, user_lastname) AGAINST ('"+smith "+john"' IN BOOLEAN MODE) 
ORDER BY user_date_accountcreated DESC 
LIMIT 0,50 

Если MariaDB версия 10.2.0- (до этого) вы могли бы использовать вложенные выберите в колонке:

SELECT 
    users.*, 
    users_oauth.*, 
    (SELECT count(*) 
    FROM users 
    LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id 
    WHERE MATCH (user_email, user_firstname, user_lastname) AGAINST ('"+smith "+john"' IN BOOLEAN MODE) 
) AS countall 
FROM users 
LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id 
WHERE 
    MATCH (user_email, user_firstname, user_lastname) AGAINST ('"+smith "+john"' IN BOOLEAN MODE) 
ORDER BY user_date_accountcreated DESC 
LIMIT 0,50 
+0

Да, я вижу, спасибо @KamilG –

1

Предел не проблема проблема, если вам нужно COUNT (*) repated на каждой строке вы можете добавить столбец с соответствующим запросом

SELECT users.*, users_oauth.* , (select count(*) FROM users 
     LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id 
     WHERE (
      (MATCH (user_email, user_firstname, user_lastname) AGAINST ('"+smith "+john"' IN BOOLEAN MODE)))) 
FROM users 
LEFT JOIN users_oauth ON users.user_id = users_oauth.oauth_user_id 
WHERE (
    (MATCH (user_email, user_firstname, user_lastname) AGAINST ('"+smith "+john"' IN BOOLEAN MODE))) 
ORDER BY user_date_accountcreated DESC LIMIT 0,50 

, но если вы хотите добавить только COUNT (*) в столбцы, выбранные в некоторой версии mysql, вы получаете только строку , а в других вы имеете ошибку, потому что это функция агрегации mixin и одиночная колонка без объявления группы по статье

+0

Спасибо, этот запрос работает отлично :) –

Смежные вопросы