У меня есть следующий тип запроса:
SELECT * FROM TABLE GROUP BY Table.Table_ID LIMIT 10
Я хочу знать, сколько строк будет выбрано, если этого LIMIT 10
не было. Я не могу просто выбрать COUNT(Table_ID)
потому что я группирую это, поэтому он будет давать по 1 в каждой строке.
Четко описан в руководстве :
SQL_CALC_FOUND_ROWS
сообщает MySQL, чтобы рассчитать, сколько строк будет в наборе результатов, неLIMIT
какого-либо предложенияLIMIT
. Затем количество строк можно получить с помощьюSELECT FOUND_ROWS()
. См. Раздел 11.13 «Информационные функции».
Если вы перейдете по ссылке в раздел 11.13, появится пример:
FOUND_ROWS()
Оператор
SELECT
может включать предложениеLIMIT
, чтобы ограничить количество строк, которые сервер возвращает клиенту. В некоторых случаях желательно знать, сколько строк оператор должен был бы вернуть безLIMIT
, но без повторного запуска оператора. Чтобы получить этот счетчик строк,SQL_CALC_FOUND_ROWS
опциюSQL_CALC_FOUND_ROWS
вSELECT
и затем вызовитеFOUND_ROWS()
:mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS();
Второй
SELECT
возвращает число, указывающее, сколько строк будет возвращено первымSELECT
если бы оно было написано без предложенияLIMIT
.В отсутствие опции
SQL_CALC_FOUND_ROWS
в последнем успешном операторе SELECTFOUND_ROWS()
возвращает количество строк в результирующем наборе, возвращаемом этим оператором. Если оператор включает предложениеLIMIT
,FOUND_ROWS()
возвращает количество строк до предела. Например,FOUND_ROWS()
возвращает10
или60
, соответственно, если оператор включаетLIMIT 10
илиLIMIT 50, 10
.
Пожалуйста, используйте документацию в качестве своего первого порта захода.
SELECT COUNT(DISTINCT TABLE_ID) FROM TABLE
Вы можете вызвать функцию mysql_num_rows
в результирующем наборе, содержащем все найденные строки.
$result = mysql_query('SELECT * FROM TABLE GROUP BY Table.Table_ID'); $row_count = mysql_num_rows($result);