Получить единственное значение результирующего набора sql

#php #sql

#php #sql

Вопрос:

Рассмотрим этот SQL-запрос

 $sql = "select count(*) as count from table where value='this'";
  

Этот запрос вернет только одно значение в поле count .

Есть ли способ получить это значение без использования fetch_array и указания первого значения возвращаемого массива вместо этого?

Комментарии:

1. Что именно вы пытаетесь сделать?

2. @Oddant: Я решил вашу проблему. Вы можете найти его ниже.

Ответ №1:

mysql_result() позволит вам извлекать значение непосредственно из результирующего набора без использования метода выборки. Вот очень простой пример того, как вы можете использовать его для получения вашего единственного значения:

 mysql_select_db( "mysql", mysql_connect( "localhost", "root", "" ) );
$r = mysql_query( "SELECT count(name) as total FROM `help_keyword`" );
echo $r ? mysql_result( $r, 0 ) : mysql_error() ; // Outputs 450
  

Для mysql_result() функции есть три параметра; первый — это сам результирующий набор, второй — индекс строки и третий — индекс поля. Я использую только первые два параметра, поскольку третий по умолчанию равен 0, возвращаемое первое поле.

Комментарии:

1. хороший способ сделать это, спасибо Джонатану и спасибо за хитрость с тестированием результата, ха : D

2. @Oddantfr Всегда пожалуйста. Спасибо за использование StackOverflow и за предоставленную мне возможность обнаружить mysql_result() то, о чем я не знал до вашего вопроса 🙂

3. @Jonathan Sampson отличный навык, ваш поиск был довольно быстрым, честно говоря, я знал об этой функции, я уже использовал ее, но я надеялся найти функцию для получения целого числа, просто передавая ответ sql_query и возвращая значение первой строки / первого поля. Если вы найдете его, просто дайте мне знать! 😀

4. @Oddantfr Вот что делает эта функция: mysql_result( $r, 0 ) выдает вам первое значение первой строки в результате (результаты count()). Я неправильно понял ваш запрос? $r — это результирующий набор, который необходим для того, чтобы функция знала, какой набор данных просматривать, второй — это индекс строки, а третий (по умолчанию 0) — индекс поля. Из того, что я могу сказать, эта функция делает именно то, что вы ищете.

5. @Jonathan Sampson о да, никогда не думал об этом, было довольно поздно, когда я отправил сообщение, и в это время мозги находятся в спящем режиме, хм .. в любом случае, спасибо 🙂

Ответ №2:

Будучи новичком в sql, я тоже потратил много времени, пытаясь напрямую использовать эти одномерные результаты sql-запросов. Я подумал, что, поскольку результат не является массивом, я мог бы пропустить эти циклы while с этими fetch_arrays.

Однако только сейчас я понимаю, что, хотя результатом может быть целое значение 8, до тех пор, пока вы не преобразуете его в значение, которым оно является, оно по-прежнему рассматривается как просто «результат запроса» вместо целого числа.

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

 $con=mysql_connect("host", "user", "password");

if(!$con)
    {die('could not connect: '.mysql_error());
    }
$db_selected=mysql_select_db("database", $con);

$sql = "the sql query that yiels one value, for example a SELECT COUNT query";

$outcome_considered_as_a_query-result-set = mysql_query($sql,$con);

$outcome_considered_as_the_one_element_of_the_result_set = mysql_result($outcome_considered_as_a_query-result-set,0);

echo $outcome_considered_as_the_one_element_of_the_result_set;

mysql_close($con);
  

Ответ №3:

Использовать: mysql_num_rows

 $count = mysql_num_rows(mysql_query($sql);
  

Просто не используйте count в этом случае. Выберите все, и это будет засчитано.

Комментарии:

1. $ mysql_num_rows не будет работать для вас оператор select count

2. @Anze Как ты думаешь, почему PHP mysql_num_rows() лучше MySQL COUNT(*) ? Пожалуйста, объясните.

3. Использование select */numrows версии крайне неэффективно. Вы заставляете MySQL извлекать / анализировать / подготавливать строки данных, а затем выбрасывать их.

4. Что ж, если вы используете Count(*), весь процесс подсчета будет выполняться на сервере sql, что приведет к уменьшению объема данных, необходимых для отправки с sql server на сервер php. С другой стороны, если вы немного ленивы :), вы можете проанализировать весь набор данных с сервера sql с помощью SELECT * и выполнить подсчет на PHP. Это зависит от того, сколько записей вы ожидаете иметь в своей таблице.

5. Я признаю, что более эффективно использовать Count (*), но он спросил, какой самый быстрый письменный (закодированный) способ сделать это.