1. PHP / Говнокод #7551

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    //отбор произвольного совета
    $query = "SELECT * FROM sovet_faraon";
    $result = mysql_query($query) or die ("Не могу выбрать данные из таблицы");
    
    $number = 0;
    while ($row = mysql_fetch_array($result)) {
        $number++;
    }
    
    //выбираем число случайным образом
    $uniq_id = rand(1, $number++);
    
    
    //выбираем этот совет по номеру
    $query = "select * from sovet_faraon where (id_sovet='$uniq_id')";
    $result = mysql_query($query) or die("Не могу выбрать значение из базы советов");
    
    while ($row = mysql_fetch_array($result)) {
        $id_sovet = $row["id_sovet"];
        $small_sovet = $row["small_sovet"];
        $big_sovet = $row["big_sovet"];
    }
    
    echo "<a href=\"list_sovet.php\" class=\"ssilka2\">" . $small_sovet . "</a>";

    Отбор произвольного совета мля... Один совет такому "программисту" дать хочется: "убейся ап стену!!!" xD
    Шучу конечно, сам наверное лет в 5 так бы написал xD

    Запостил: code_master, 16 Августа 2011

    Комментарии (29) RSS

    • select * from sovet_faraon order by rand() limit 1
      Ответить
      • Добро пожаловать на борт!
        Ответить
      • Удачи, особенно с табличками в несколько сотен тысяч записей и более. Использование вычисляемых выражений в order by приводит к тому, что данное выражение вычисляется для каждой строки.
        Ответить
        • о, тогда подскажите вот что делать если в табличке 500000К записей и надо выбрать произвольную, номер записи использовать нельзя ибо некоторые удалены =)
          Ответить
          • http://lmgtfy.com/?q=mysql+rand+alternative
            Ответить
            • ))) спасибо за метод поиска google ))))
              "мне повезёт":
              SELECT @count := COUNT(*) FROM fruit;
              SET @offset = CONVERT(FLOOR(RAND() * @count), SIGNED);
              PREPARE mystatement FROM "SELECT * FROM fruit LIMIT ?, 1";
              EXECUTE mystatement USING @offset;
              DEALLOCATE PREPARE mystatement;
              Ответить
              • Все четко, в 2 запроса ибо в лимит не подставить вложенный запрос.
                Ответить
          • В случае с огромным количеством записей лучше "случайные" советы генерировать заранее по хрону и потом выдавать из кеша.
            Ответить
            • а еще никто не мешает "случайные" советы давать одинаковые нескольким клиентам сразу
              Ответить
              • а еще можно обойтись и всего то десятком советов. Или запилить генератор советов собирающий совет из 20-30 заготовок.
                Ответить
                • проблема достать достаточно рандомно одну или несколько строк из огромной таблы не такая уж надуманная...
                  Ответить
        • Ладно дружок, тогда можно сделать вот так -

          $get_max_min = mysql_query('select min('id_sovet'),max('id_sovet') from sovet_faraon);
          $get_max_min = mysql_fetch_array($get_max_min);

          $get_rand = rand($get_max_min[0],$get_max_min[1]);

          $result = mysql_query('select * from sovet_faraon where id_sovet = '.$get_rand);

          Но совершенно не так как написал автор ...
          Ответить
          • с учетом конечно если из таблицы не чего не удаляется
            Ответить
            • А можно соединить способ, описанный doremidon с этим и получим:
              $query = mysql_query("SELECT COUNT(*) AS COUNT FROM table;");
              $data = mysql_fetch_array($query);
              $result = mysql_query("SELECT * FROM table LIMIT ".rand(0, $data["COUNT"]-1).", 1");
              Ответить
              • зачем считать все поля если можно посчитать count(1); И представите каждый раз считать милион записей ...
                Ответить
                • >зачем считать все поля
                  Оптимизация же
                  >И представите каждый раз считать милион записей
                  А это смотря какой движок используется.
                  Ответить
            • тут и об этом есть http://hudson.su/2010/09/16/mysql-optimizaciya-order-by-rand/
              Ответить
    • в советской фараонии случайная строка выбирает тебя
      Ответить
    • Шучу конечно, сам наверное лет в 5 так бы написал xD

      омг. что за школьный пафос ?
      Ответить
      • 5 лет - это детсадовский пафос. Если бы я в 5 лет знал SQL и PHP, сейчас бы писал автопилоты для искусственных спутников (но не на PHP, там память течет).
        Ответить
        • > но не на PHP, там память течет
          на любимом JS?
          Ответить
          • На Erlang, наверное. Когда это вы успели изучить мои сексуальные предпочтения?
            Ответить
      • > сам наверное лет в 5 так бы написал xD...

        Год выпуска php - 1994. Но в то время он был недостаточно популярен и это был не "тот php"... И если "code_master" не является виртуалом Расмуса (вероятность этого бесконечно малая), значит год, когда товарищ услышал о php был как минимум 1997.
        1997 - 5 = 1992.
        Сейчас 2011.
        2011 - 1992 = 19 (максимальный возраст /user/526 ).
        Ответить
    • > $id_sovet = $row["id_sovet"];
      > $small_sovet = $row["small_sovet"];
      > $big_sovet = $row["big_sovet"];
      Большие Грязи, Малые Грязи, ИдиТыВ Грязи...
      Ответить
    • > ssilka2
      не ссиль-ка ты сюда...
      Ответить
    • >mysql_query($query) or die
      За такое надо четвертовать.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Разбудил меня грохот трактора, проезжающего по улице. Мой член обмяк, но находился все еще в Пашке. Я вышел из него и разбудил его поцелуями.
      Ответить

    Добавить комментарий