Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: mysql_result или лучше аналог
 
 автор: Bvz   (24.12.2008 в 18:16)   письмо автору
 
 

для подсчета количества записей в таблице использую mysql_result, как посоветовали здесь на форуме. Но официальный мануал предлагает скоростные альтернативы : mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc() и mysql_fetch_object(), и все же на чем остановиться?

  Ответить  
 
 автор: ddhvvn   (24.12.2008 в 18:27)   письмо автору
 
   для: Bvz   (24.12.2008 в 18:16)
 

>для подсчета количества записей в таблице использую mysql_result, как посоветовали здесь на форуме
О_О
на КАКОМ форуме Вам посоветовали такое?

  Ответить  
 
 автор: Bvz   (24.12.2008 в 18:37)   письмо автору
 
   для: ddhvvn   (24.12.2008 в 18:27)
 

тута ))
вот ссылка
разъсните плиз как правильнее ))

  Ответить  
 
 автор: ddhvvn   (24.12.2008 в 18:52)   письмо автору
 
   для: Bvz   (24.12.2008 в 18:37)
 

аааа... Вы делаете типа

<?php
...
  
$q "SELECT COUNT(*)..";
  
$count mysql_result(mysql_query($query), 0);
...
?>

?
Если да, тогда все норм.

  Ответить  
 
 автор: Bvz   (24.12.2008 в 19:16)   письмо автору
 
   для: ddhvvn   (24.12.2008 в 18:52)
 

вот так делал:

<?php
$select_query 
mysql_query("SELECT COUNT(*) AS num FROM news")or die ("$test");

$news=mysql_result($select_query,0,'num');
?>

  Ответить  
 
 автор: ddhvvn   (24.12.2008 в 20:24)   письмо автору
 
   для: Bvz   (24.12.2008 в 19:16)
 

Нормально, третий параметр в принципе можно опустить.

  Ответить  
 
 автор: Николай2357   (24.12.2008 в 19:17)   письмо автору
 
   для: Bvz   (24.12.2008 в 18:37)
 

Если Вам нужно просто подсчитать количество строк в таблице, без вывода данных, то это оптимальный вариант. Дело в том, что при таком запросе в переменную PHP запишекся только значение псевдонима. При применении любой из Вами перечисленных функций в переменную будет записано гораздо больше, что не оправдается даже более высокой скоростью работы самой функции. Если Вам попутно нужно что то вывести, то лучше использовать другие.

  Ответить  
 
 автор: Bvz   (24.12.2008 в 19:29)   письмо автору
 
   для: Николай2357   (24.12.2008 в 19:17)
 

Спасибо, Вы как всегда все толково объяснили, разобрался, при подсчете количества строк я это использую. Тогда встречный вопрос, а если попутно вывести что-то то какая функция оптимальна?

  Ответить  
 
 автор: Valick   (24.12.2008 в 19:36)   письмо автору
 
   для: Bvz   (24.12.2008 в 19:29)
 

На вопрос: "что-то"
в данном контексте самый правильный ответ: "какая-то"

  Ответить  
 
 автор: Bvz   (24.12.2008 в 19:43)   письмо автору
 
   для: Valick   (24.12.2008 в 19:36)
 

))
ну вот например


<?php

//проверяем наличие новостей в БД
$select_query mysql_query("SELECT COUNT(*) AS num FROM news")or die ("$test");

$news=mysql_result($select_query,0,'num');

    if (
$news == 0)

        {
            exit (
"$test");
        }

//публикуем новости
$all_news mysql_query("SELECT * FROM news");

while (
$select_news mysql_fetch_assoc($all_news))

    {
        echo 
"<div class=\"news\"><h3>".$select_news["name_news"]."</h3>";

        echo 
$select_news["news"]."</div>";
    }

?>

  Ответить  
 
 автор: Николай2357   (24.12.2008 в 22:03)   письмо автору
 
   для: Bvz   (24.12.2008 в 19:43)
 

Попутно, это я имел ввиду, что при выборке каких то строк по определённому условию, нужно не только получить их значения, но и подсчитать количество строк, удовлетворяющих этому условию. Тогда для подсчёта можно использовать к примеру mysql_num_rows(); а для вывода значений тот же mysql_fetch_assoc(); Тогда Ваша конструкция будет выглядеть примерно так:
<?php

//публикуем новости 
$all_news mysql_query("SELECT `name_news`,`news` FROM news"); 

if (
mysql_num_rows($all_news) == 0)
exit (
$test);

while (
$select_news mysql_fetch_assoc($all_news)) 
  echo 
"<div class=\"news\"><h3>".$select_news["name_news"]."</h3>".$select_news["news"]."</div>"

?>

  Ответить  
 
 автор: Bvz   (24.12.2008 в 22:59)   письмо автору
 
   для: Николай2357   (24.12.2008 в 22:03)
 

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

<?php

//проверяем существует ли таблица и есть ли в ней записи
$all_news mysql_query("SELECT `name_news`,`news` FROM news");

if (
$all_news == NULL || mysql_num_rows($all_news) == 0)
    exit (
$test);

//публикуем новости
while ($select_news mysql_fetch_assoc($all_news))
    echo 
"<div class=\"news\"><h3>".$select_news["name_news"]."</h3>".$select_news["news"]."</div>";

?>

как Вам такой вариант?

  Ответить  
 
 автор: Николай2357   (24.12.2008 в 23:53)   письмо автору
 
   для: Bvz   (24.12.2008 в 22:59)
 

Вообще то это лишнее))) Если записей нет, то откуда таблице взятся?

  Ответить  
 
 автор: Bvz   (25.12.2008 в 08:37)   письмо автору
 
   для: Николай2357   (24.12.2008 в 23:53)
 

ну например таблица пустая ))

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 08:49)   письмо автору
 
   для: Bvz   (25.12.2008 в 08:37)
 

Ну если она пустая, значит нет записей в ней... А если есть запись, значит и таблица есть. Даже если есть таблица и есть записи, а запрос не прошел, всё равно количество рядов будет ==0. Так что лишнее это. Масло масляное в маслёнке ))) К тому же, если и проверять, то лучше не на NULL, а на true.

  Ответить  
 
 автор: Bvz   (25.12.2008 в 09:07)   письмо автору
 
   для: Николай2357   (25.12.2008 в 08:49)
 

учел, просто, если есть таблица и нет записей то выдает ошибку
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in Z:\home\mysite\www\index.php on line 39
потом выводит переменную $test

а если

if ($all_news == FALSE || mysql_num_rows($all_news) == 0)
    exit ($test);

то ошибку не выдает, а сразу переменную $test

можно подавить собакой, но не очень хотелось бы

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 09:15)   письмо автору
 
   для: Bvz   (25.12.2008 в 09:07)
 

Ошибки лучше коллекционировать в логах. Проще диагностику делать. А такая проверка разве нотис не выдаёт? true получится, если запрос успешный. Тут немного другая логика должна быть. Хотя и так сойдёт.

  Ответить  
 
 автор: Trianon   (25.12.2008 в 09:17)   письмо автору
 
   для: Николай2357   (25.12.2008 в 09:15)
 

>true получится, если запрос успешный
ерунда.

  Ответить  
 
 автор: Bvz   (25.12.2008 в 09:19)   письмо автору
 
   для: Trianon   (25.12.2008 в 09:17)
 

исправил

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 09:22)   письмо автору
 
   для: Trianon   (25.12.2008 в 09:17)
 

>ерунда.
Оч. интересно. И интрегующе. Наверно и руководство нужно читать осторожно... Вот от туда:
Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель на результат запроса, или FALSE если запрос не был выполнен. В остальных случаях, mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки.

Я же имею ввиду общее применение, не конкретно этот случай.

  Ответить  
 
 автор: Trianon   (25.12.2008 в 10:01)   письмо автору
 
   для: Николай2357   (25.12.2008 в 09:22)
 

В этой ветви вы рассматриваете именно SELECT.

>Я же имею ввиду общее применение, не конкретно этот случай.

Тогда нужно писать, что возвращается значение, отличное от false

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 10:08)   письмо автору
 
   для: Trianon   (25.12.2008 в 10:01)
 

В ветке вообще то рассматривался вопрос о подсчёте количества записей. А вот сейчас вообще до логов дописались... Я сам запутался уже, постораюсь быть точнее. Спасибо за поправку.

  Ответить  
 
 автор: Bvz   (25.12.2008 в 09:25)   письмо автору
 
   для: Николай2357   (25.12.2008 в 09:15)
 

я не знаю как ошибки в логи писать ))

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 09:29)   письмо автору
 
   для: Bvz   (25.12.2008 в 09:25)
 

Как минимум в .htaccess надо прописать это:
php_flag display_errors Off
php_flag log_errors On
, тогда нотисы на экран не полезут, а запишутся в лог.

  Ответить  
 
 автор: Bvz   (25.12.2008 в 09:36)   письмо автору
 
   для: Николай2357   (25.12.2008 в 09:29)
 

создал в корне .htaccess
содержанием

php_flag display_errors Off
php_flag log_errors On

так же в корне создал error.log
ошибки не выводятся но в логи не пишется ((

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 09:45)   письмо автору
 
   для: Bvz   (25.12.2008 в 09:36)
 

Ну я же написал - как минимум))). Добавьте это:
php_value error_log error.log

  Ответить  
 
 автор: Bvz   (25.12.2008 в 09:57)   письмо автору
 
   для: Николай2357   (25.12.2008 в 09:45)
 

странно, вообще страница перестала грузиться, а как максимум?

  Ответить  
 
 автор: Николай2357   (25.12.2008 в 10:06)   письмо автору
 
   для: Bvz   (25.12.2008 в 09:57)
 

Это и есть максимум. Минимальный))) Проблема не в этом у Вас, так всё должно работать.

  Ответить  
 
 автор: Bvz   (25.12.2008 в 10:13)   письмо автору
 
   для: Николай2357   (25.12.2008 в 10:06)
 

все работает, разобрался, спасибо! ))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования