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

    +5

    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
    function getadminuserid(){
    	global $wpdb;
        //Get all users in the DB
        $wp_user_search = $wpdb->get_results("SELECT ID, display_name FROM $wpdb->users ORDER BY ID");
    
        //Blank array
        $adminArray = array();
        //Loop through all users
        foreach ( $wp_user_search as $userid ) {
            //Current user ID we are looping through
            $curID = $userid->ID;
            //Grab the user info of current ID
            $curuser = get_userdata($curID);
            //Current user level
            $user_level = $curuser->user_level;
            //Only look for admins
            if($user_level >= 8){//levels 8, 9 and 10 are admin
                //Push user ID into array
                $adminArray[] = $curID;
            }
        }
        return $adminArray;
    }

    1) Get IDs for all users
    2) Iterate over result set to find admin `get_userdata` function = 1 DB call

    outcome:
    1) full RAM
    2) dead DB

    ===
    official woocommerce plugin by company

    Запостил: tatocaster, 27 Октября 2017

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

    • facepalminho
      Ответить
    • В базе наверно плохо оптимизация сложных запросов работала, а PHP запускали с супердвижком, который и компилирует, и JIT умеет.

      get_userdata - тоже запрос к БД?
      function get_userdata($userID){
          global $wpdb;
          //Get all users in the DB
          $wp_user_search = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY ID");
      
          //Blank array
          $userArray = array();
          //Loop through all users
          foreach ( $wp_user_search as $user ) {
              //Current user ID we are looping through
              $curID = $user->ID;
              //Only look for users having required ID
              if($userID === $curID) { // User ID is the required ID
                  //Push user data into array
                  $userArray[] = $user;
              }
          }
          return $userArray;
      }
      Ответить
      • >> if($userID === $curID) { // User ID is the required ID
        "я слышал что WHERE тормозит"
        Ответить
        • А ведь автор знает толк в оптимизации - заюзал SELECT ID, display_name вместо SELECT *, чтобы лишние поля не читать.
          Ответить
          • А ещё результат выполнения этого запроса можно закешировать, что бы не делать запрос в БД на каждого пользователя.
            Ответить
    • > curID
      > userid
      > adminArray
      > user_level
      Феерично.
      Ответить
      • Это про регистр и подчёркивания в наименованиях? Так это навеяно стандартной библиотекой "PHP", там так же:
        http://phpsadness.com/sad/4
        http://phpsadness.com/sad/15

        И отдельный котёл за двойку вместо «to» в одних названиях и за «to» в других:
        http://phpsadness.com/sad/48
        Ответить
    • А почему нет проверки на пустоту $wp_user_search ?
      Или в базе всегда мы что-то да найдем.
      Ответить
      • А зачем проверка? На пустом массиве $wp_user_search foreach не будет звать своё тело и $adminArray просто останется пустым. Или я заблуждаюсь?
        Ответить
        • Спасибо за вопрос :) оказывается и правда ничего не будет.
          Видимо, это по привычке.
          Когда используете, например, рендер шаблона в цикле с передачей элемента массива.
          А в шаблоне к примеру происходит обращение к свойству объекта. В этом случае у вас будет Fatal Error.
          Я думаю, лучше на всякий случай писать проверки.
          Ответить
          • Хотя нет. в данном случае это и правда избыточно.
            Ответить

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