#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()
лучше MySQLCOUNT(*)
? Пожалуйста, объясните.3. Использование
select */numrows
версии крайне неэффективно. Вы заставляете MySQL извлекать / анализировать / подготавливать строки данных, а затем выбрасывать их.4. Что ж, если вы используете Count(*), весь процесс подсчета будет выполняться на сервере sql, что приведет к уменьшению объема данных, необходимых для отправки с sql server на сервер php. С другой стороны, если вы немного ленивы :), вы можете проанализировать весь набор данных с сервера sql с помощью SELECT * и выполнить подсчет на PHP. Это зависит от того, сколько записей вы ожидаете иметь в своей таблице.
5. Я признаю, что более эффективно использовать Count (*), но он спросил, какой самый быстрый письменный (закодированный) способ сделать это.