2012-03-19 2 views
1

Предположим, у меня есть записи 1kk в моей базе данных.Diffrence в запросах запросов mysql

Теперь мне нужно выбрать некоторые данные, а также мне нужно знать, сколько полей сделал я выбрать, поэтому мой вопрос:

Является ли это лучше, чтобы запустить один запрос для подсчета данных, как это:

SELECT COUNT("id") from table where something = 'something' 

и после этого запуска еще один querio для выбора, как это:

SELECT 'some_field' from table where something = 'something'; 

Или Может быть, это лучше всего выбирать данные и п просто посчитать его с PHP как:

count($rows); 

Или, может быть, есть еще лучше способов сделать это, например, сделать все это в одном запросе?

+0

Нет, если вы уже запустить запрос, чтобы получить кучу данных, нет необходимости запускать другой запрос, чтобы получить счет. Эта информация уже создана, и вы можете получить ее по-разному. – Dave

ответ

2

Чтение между строками, я думаю, что вы, вероятно, после этого, это SQL_CALC_FOUND_ROWS. Это позволяет вам выбрать часть набора результатов (с использованием предложения LIMIT) и по-прежнему вычислять общее количество совпадающих строк за одну операцию. Вы по-прежнему использовать два запроса, но фактическая операция поиска данных происходит только один раз:

// First get the results you want... 
$result = mysql_query(" 
    SELECT SQL_CALC_FOUND_ROWS 
    FROM `table` 
    WHERE `something` = 'something' 
    LIMIT 0, 10 
"); 

// ...now get the total number of results 
$numRows = mysql_query(" 
    SELECT FOUND_ROWS() 
"); 
$numRows = mysql_fetch_row($numRows); 
$numRows = $numRows[0]; 
1

Если вы запрашиваете все, что 1000 записей, то вы можете рассчитывать в то время как вы выборки:

$res=mysql_query("SELECT 'some_field' from table where something = 'something'"); 
while($r = mysql_fetch_*($res)) { 
    $count++; 

//> Do stuff 
} 

Таким образом, вы делаете только один запрос, и вы не используете mysql_num_rows();

1

Один запрос будет выглядеть так:

SELECT Count(*) AS NumRows, some_field from table 
GROUP BY some_field where something = 'something'; 
Смежные вопросы