То, что я пытаюсь сделать, это вернуть как мои запрошенные (и ограниченные) результаты, так и общее количество элементов в таблице. Вот что я до сих пор.
SELECT id, name
FROM ??
WHERE
user_id = ?
LIMIT ? , ?;
SELECT COUNT(*) as total
FROM ??
WHERE
user_id = ?
;
Это два SQL-запроса, и мне было интересно, как это можно объединить в один. Я хотел бы, чтобы сумма была сама по себе (если возможно), иначе как прикрепленный столбец к каждой строке. Или, может быть, то, что у меня сейчас, является наиболее оптимальным решением.
SELECT SQL_CALC_FOUND_ROWS
...
LIMIT ...
SELECT FOUND_ROWS();
Или, я бы проголосовал за CROSS JOIN
, а не в подзапрос.
Ну, вы можете включить счет в каждой строке, используя подзапрос:
SELECT
id,
name,
(SELECT COUNT(*) FROM yourTable WHERE user_id = ?) total
FROM yourTable
WHERE
user_id = ?;
Но, с точки зрения разделов озабоченностей, это, вероятно, не лучшая практика. Вместо этого, как правило, я ожидал увидеть два отдельных запроса.
Другой способ сделать то же самое с помощью 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
?, ?