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

    +159

    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
    25. 25
    26. 26
    27. 27
    28. 28
    // выбираем случайные категории
            $sql="
                  SELECT `id`
                  FROM `category`
                  WHERE id>=(SELECT ROUND(RAND()*(SELECT COUNT(*) FROM `stat`)))
                  limit ".$this->limit;
            $arr=Yii::app()->db->createCommand($sql)->query();
    
            // в nn будем хранить строку вида a,b,...,e где abc -цифры
            // позже мы скормим это в условие для sql запроса, это самый простой способ
            $nn='';
    
            foreach ($arr as $val){
                $nn.=$val['id'].',';
            }
    
            //добавим в конце строки "end", чтобы избавиться от лишней запятой
            $nn.='END';
    
            // выбираем пользователей из случайных категории, сгенерированных ранее
            $sql="
                  SELECT name, category_id, COUNT(category_id) AS total
                    FROM `stat`
                        JOIN `category` as C
                        WHERE C.id=category_id AND C.id in (".str_replace(',END','',$nn).")
                    GROUP BY category_id
                    limit ".$this->limit;
            $arr=Yii::app()->db->createCommand($sql)->query();

    Сказочный говнокод. Сохранены авторские комментарии.

    Запостил: SunnyMagadan, 27 Ноября 2013

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

    • $nn.='END';
      ...
      str_replace(',END','',$nn)

      А ещё можно вместо END использовать SMURF или кличку домашнего питомца.
      Ответить
    • простите, а верно ли таким запросом выбирать случайную запись? по мне странно как-то считать кол-во записей подзапросом
      Ответить
    • похабненько люди Yii используют
      Ответить
    • Сказано же, это самый простой способ!
      Ответить
    • $arr=array_rand(Category::model()->findAll(),$this->limit);

      Индусы такие индусы :)
      Ответить

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