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

Форум PHP

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

 

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

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

тема: перестал работать скрипт
 
 автор: Bvz   (28.01.2010 в 16:13)   письмо автору
 
 

с утра работал скрипт
<?php
if(!defined("INCLUDE")) exit('запрет на прямой доступ');
include 
'include/config.php';

$query mysql_query("SELECT COUNT(*) AS num FROM  `photo` ");
$num mysql_result($query,0,'num');
$n rand(1,$num);
        
$sql "SELECT `url` FROM `photo` WHERE id = $n";

        
$photo mysql_query("$sql");
        if (
mysql_num_rows($photo) == 0)
            {
                echo 
"в данном разделе информация не обнаружена";
            }
        else
            {
                    
$select_photo mysql_fetch_assoc($photo);
                    echo 
"<div align=\"center\"><img src=\"media/original/".$select_photo["url"]."\" /></div>";
            }
?>


а теперь выдает в данном разделе информация не обнаружена

  Ответить  
 
 автор: Тень   (28.01.2010 в 16:15)
 
   для: Bvz   (28.01.2010 в 16:13)
 

А кто сказал, что id'ы обязаны следовать один за другим? Используй ORDER BY id LIMIT $n, 1 (только $n = rand(0, $num - 1))

  Ответить  
 
 автор: Тень   (28.01.2010 в 16:16)
 
   для: Тень   (28.01.2010 в 16:15)
 

А может ORDER BY id даже и не нужно будет...

  Ответить  
 
 автор: Bvz   (28.01.2010 в 16:22)   письмо автору
 
   для: Тень   (28.01.2010 в 16:16)
 

никак не помогает
а как узнать минимальный id?

  Ответить  
 
 автор: Лена   (28.01.2010 в 16:49)   письмо автору
 
   для: Bvz   (28.01.2010 в 16:13)
 

Вам нужно разобраться, в каком именно месте у Вас ошибка.
Сам запрос вы пробовали выводить?


<?php
$sql 
"SELECT `url` FROM `photo` WHERE id = " $n;
$photo mysql_query($sql); //здесь я убрала ваши кавычки
if(!$photo) exit("Error in " $sql mysql_error());
?>


Или просто посмотреть print $sql, чтобы определить, получаете ли Вы $n.

  Ответить  
 
 автор: neadekvat   (28.01.2010 в 16:52)   письмо автору
 
   для: Bvz   (28.01.2010 в 16:13)
 

а ORDER BY RAND() LIMIT 1 не подходит?

  Ответить  
 
 автор: Bvz   (28.01.2010 в 16:57)   письмо автору
 
   для: neadekvat   (28.01.2010 в 16:52)
 

спасибо

<?php
if(!defined("INCLUDE")) exit('запрет на прямой доступ');
include 
'include/config.php';

        
$sql "SELECT `url` FROM `photo` ORDER BY RAND() LIMIT 1";

        
$photo mysql_query("$sql");
        if (
mysql_num_rows($photo) == 0)
            {
                echo 
"в данном разделе информация не обнаружена";
            }
        else
            {
                    
$select_photo mysql_fetch_assoc($photo);
                    echo 
"<div align=\"center\"><img src=\"media/original/".$select_photo["url"]."\" width=\"50%\" height=\"50%\" /></div>";
            }
?>


заработало

  Ответить  
 
 автор: neadekvat   (28.01.2010 в 17:16)   письмо автору
 
   для: Bvz   (28.01.2010 в 16:57)
 

<?php  $photo mysql_query("$sql");

=>
<?php  $photo mysql_query($sql);

————————————————————————
<?php if (mysql_num_rows($photo) == 0)

=>
<?php if (!mysql_num_rows($photo))

  Ответить  
 
 автор: Bvz   (28.01.2010 в 17:29)   письмо автору
 
   для: neadekvat   (28.01.2010 в 17:16)
 

что вы хотели этим сказать?

  Ответить  
 
 автор: neadekvat   (28.01.2010 в 17:41)   письмо автору
 
   для: Bvz   (28.01.2010 в 17:29)
 

То, что не надо заключать в кавычки переменные и сравнивать что-то с нулем

  Ответить  
 
 автор: Bvz   (28.01.2010 в 18:27)   письмо автору
 
   для: neadekvat   (28.01.2010 в 17:41)
 

принято, спасибо, а как правильно?

  Ответить  
 
 автор: Тень   (28.01.2010 в 20:03)
 
   для: neadekvat   (28.01.2010 в 17:41)
 

С нулём читабельнее.

  Ответить  
 
 автор: Тень   (28.01.2010 в 20:03)
 
   для: neadekvat   (28.01.2010 в 16:52)
 

> а ORDER BY RAND() LIMIT 1 не подходит?

Нет

  Ответить  
 
 автор: neadekvat   (29.01.2010 в 06:38)   письмо автору
 
   для: Тень   (28.01.2010 в 20:03)
 

Предложения явно не закончено.
Аргументируйте.
Может, вы, как и на хабре, предложите создавать временную табличку и еще с чем-то ибацо ради одной рандомной строчки?

  Ответить  
 
 автор: Тень   (29.01.2010 в 07:30)
 
   для: neadekvat   (29.01.2010 в 06:38)
 

Первый ответ в теме.

[поправлено модератором]

  Ответить  
 
 автор: neadekvat   (29.01.2010 в 14:11)   письмо автору
 
   для: Тень   (29.01.2010 в 07:30)
 

Меня этому еще в детском саду научили.
Если вы про это:
А кто сказал, что id'ы обязаны следовать один за другим? Используй ORDER BY id LIMIT $n, 1 (только $n = rand(0, $num - 1))

То это никоим образом к моему предложению относится не может.

  Ответить  
 
 автор: Тень   (29.01.2010 в 14:57)
 
   для: neadekvat   (29.01.2010 в 14:11)
 

вместо псевдослучайного оффсета вы подставляете ORDER BY RAND

[поправлено модератором]

  Ответить  
 
 автор: neadekvat   (29.01.2010 в 14:59)   письмо автору
 
   для: Тень   (29.01.2010 в 14:57)
 

То есть, вы не понимаете значения выражения ORDER BY RAND() ?

  Ответить  
 
 автор: Тень   (29.01.2010 в 15:03)   письмо автору
 
   для: neadekvat   (29.01.2010 в 14:59)
 

http://sqlinfo.ru/forum/viewtopic.php?pid=7999#p7999

[поправлено модератором]

  Ответить  
 
 автор: neadekvat   (29.01.2010 в 15:12)   письмо автору
 
   для: Тень   (29.01.2010 в 15:03)
 

А момент про то, что поле должно быть "без дырок", вы, по-моему, упустили.

  Ответить  
 
 автор: Тень   (29.01.2010 в 16:26)   письмо автору
 
   для: neadekvat   (29.01.2010 в 15:12)
 

[поправлено модератором]

  Ответить  
 
 автор: neadekvat   (29.01.2010 в 16:28)   письмо автору
 
   для: Тень   (29.01.2010 в 16:26)
 

Я не спорю, что SORT BY RAND() - достаточно "долгая" операция. Но то, что предложили вы - бред.
$n, 1 (только $n = rand(0, $num - 1))
Чем ваша строчка лучше авторской
$n, 1 (только $n = rand(1, $num ))
?
Можно также попасть на несуществующую запись.

  Ответить  
 
 автор: Тень   (29.01.2010 в 16:29)   письмо автору
 
   для: neadekvat   (29.01.2010 в 16:28)
 

Конечно, эту ситуацию надо отдельно рассмотреть. А строчку эту я поменял затем, что offset от нуля до N - 1, где N -- общее количество записей.

[поправлено модератором]

  Ответить  
 
 автор: neadekvat   (29.01.2010 в 16:33)   письмо автору
 
   для: Тень   (29.01.2010 в 16:29)
 

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

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

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