получить общее количество элементов, используя ключевое слово LIMIT

0

То, что я пытаюсь сделать, это вернуть как мои запрошенные (и ограниченные) результаты, так и общее количество элементов в таблице. Вот что я до сих пор.

    SELECT id, name
    FROM ??
    WHERE
        user_id = ?
    LIMIT ? , ?;

    SELECT COUNT(*) as total
    FROM ??
    WHERE
        user_id = ?
    ;

Это два SQL-запроса, и мне было интересно, как это можно объединить в один. Я хотел бы, чтобы сумма была сама по себе (если возможно), иначе как прикрепленный столбец к каждой строке. Или, может быть, то, что у меня сейчас, является наиболее оптимальным решением.

Теги:
mariadb

3 ответа

2
Лучший ответ
SELECT SQL_CALC_FOUND_ROWS
    ...
    LIMIT ...

SELECT FOUND_ROWS();

Ссылка.

Или, я бы проголосовал за CROSS JOIN, а не в подзапрос.

3

Ну, вы можете включить счет в каждой строке, используя подзапрос:

SELECT
    id,
    name,
    (SELECT COUNT(*) FROM yourTable WHERE user_id = ?) total
FROM yourTable
WHERE
    user_id = ?;

Но, с точки зрения разделов озабоченностей, это, вероятно, не лучшая практика. Вместо этого, как правило, я ожидал увидеть два отдельных запроса.

  • 0
    Да, я думаю о лучшем способе запроса моей базы данных. Возможно я буду держать это как два заявления. Я приму ответ, когда смогу
  • 0
    Отсутствует запятая. И подзапрос будет выполняться повторно.
Показать ещё 3 комментария
2

Другой способ сделать то же самое с помощью CROSS JOIN

SELECT 
        t1.id,
        t1.[name],
        t2.cnt 
FROM 
        yourtable t1

CROSS JOIN 
        (
            SELECT 
                    COUNT(1) AS cnt 
            FROM 
                    yourtable 
            WHERE 
                    [user_id] = ? 
        ) t2
WHERE 
        t1.[user_id] = ?
LIMIT 
        ?, ?
  • 0
    а если мне нужен лимит по первой таблице?
  • 0
    Вы можете использовать ограничение во внешнем запросе после предложения where

Ещё вопросы

Сообщество Overcoder
Наверх
Меню