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

    +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
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    $scales = db_select('_scale', 'q')
            ->condition('q.gender', $gender)
            ->fields('q', array('id'))
            ->execute();
    
        $i = 1;
        while ($scale = $scales->fetchObject()) {
            $raw_score = 0;
    
            $query = db_select('_scale_question', 'q')
                ->condition('q.scale_id', $scale->id)
                ->fields('q')
                ->execute();
    
            while ($item = $query->fetchObject()) {
                $user_answer = db_select('_user_answer', 'q')
                    ->condition('q.question_id', $item->question_id)
                    ->condition('q.result_id', $result_id)
                    ->fields('q', array('answer'))
                    ->execute()
                    ->fetchField();
    
                if ($user_answer == $item->expected_answer) {
                    $raw_score++;
                }
            }
    
    
            $raw_scores_item['scale_id'] = $scale->id;
            $raw_scores_item['score'] = $raw_score;
    
            $raw_scores[$i] = $raw_scores_item;
            $i++;
        }

    Drupal 7, SQL-запросы с DB API Drupal в двойном цикле(!).
    ...А заменить можно 1 нормальным SQL-запросом.

    Запостил: skigf, 10 Декабря 2015

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

    • Ещё кто-то проникся духом NoSQL?
      Ответить
      • Так-то там SQL есть. Только в циклах >140(!) раз делается SELECT ... WHERE ... И 350 мс времени отъедается. + читать такой код неудобно.
        Ответить
    • ОРМы и псевдо-ОРМы не нужны.
      Ответить
      • Проект изначально был написан на Друпале. А проявлять инициативу, переписывая весь код в одиночку как-то не хочется, потому поправляю там, где подгорело.
        Ответить
      • Писал недавно что-то типа автопостроителя запросов. Задаешь связи между таблицами, что известно и что нужно. Куча INNER JOIN'ов в итоге.
        Ответить
        • >задаешь связи между таблицами.
          Зачем ?

          при проектировании БД все связи уже есть. Совершенно не трудно вытащить все foreign ключи.
          Вопрос тут как определить когда нужно тянуть данные из связанной таблы а когда нет.
          Ответить
          • У меня дома скрипт есть с поиском в глубину. Забросил. Дома буду, скину код
            Ответить
    • vanished
      Ответить

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