За последние 24 часа нас посетили 35049 программистов и 1747 роботов. Сейчас ищут 817 программистов ...

Вопрос по поводу ORDER BY RAND()

Тема в разделе "PHP для новичков", создана пользователем bybad, 12 сен 2011.

  1. bybad

    bybad Активный пользователь

    С нами с:
    31 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    Нужна случайная выборка строк из базы данных (для капчи), использую запрос ORDER BY RAND() и обнаружил, что почему то он работает не со всеми строками таблицы, например у меня ни разу не встречаются первые 3 строки.

    PHP:
    1. $result4 = mysql_query ("select * from capcha ORDER BY RAND() LIMIT 1",$db);
    2. $myrow4 = mysql_fetch_array($result4);
    Вот структура таблицы capcha
    [​IMG]

    Кто нибудь знает почему первые 3 строки не участвуют в рандомной выборке ?
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    bybad
    1. Зачем ты отдаешь заранее сгенерированную капчу?
    2. Не используй ORDER BY RAND() - это нереально медленная вещь. Хотя на таблице из 11 записей ты этого не заметишь
    3. Работает со всеми. Убедись в этом, оставив только те, которых нет в результате, и удалив остальные.
     
  3. bybad

    bybad Активный пользователь

    С нами с:
    31 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    1.Это пока всё на локальной машине, собираю всё в кучу, капчи будут другие, так что можно не переживать.
    2.Ну планирую запихнуть капчей 300-500, читал в инете что до 1000 работает незаметно.
    3.Оставлял только первые 5, показывались только 4 и 5 строки !

    П.С. Если не использовать ORDER BY RAND() тогда подскажите пожалуйста каким способом это сделать лучше ?
    "Програмлю" совсем недавно и ещё мало в чём разбираюсь, пробовал адаптировать http://www.php.ru/forum/viewtopic.p...EB%F3%F7%E0%E9%ED%E0%FF+%E2%FB%E1%EE%F0%EA%E0этот код под себя - не получилось.
     
  4. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Какая разница, на локальной или на глобальной. Зачем вообще ты хранишь в базе варианты капчи? Зачем тебе вообще заранее сгенерированные варианты капчи?
     
  5. bybad

    bybad Активный пользователь

    С нами с:
    31 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    Интересно, в ответ на мои вопросы слышу только вопросы. Выше я написал:
    если есть то чего я не знаю, буду рад если поделитесь.
     
  6. bybad

    bybad Активный пользователь

    С нами с:
    31 июл 2011
    Сообщения:
    25
    Симпатии:
    0
    PHP:
    1. <?php
    2.  $limit['limit']='1'; //сколько обработать записей сразу, по 1.
    3.  for($i=1;$i<=$limit['limit'];$i++)
    4.  {
    5.  $a=mysql_query("SELECT img FROM comments_setting", $db) or die (mysql_error());
    6.  while(=mysql_fetch_array($a)){$img[]=['img'];}
    7. shuffle($img);
    8.  $rand=$img[rand(0,count($img)+1)];
    9.  }
    10.  ?>
    Это подойдёт для случайной выборки ? если да то буду под себя настраивать пробовать.