2015-11-22 5 views
0

Приведенный ниже запрос отлично работает, когда я пытаюсь его использовать в консоли.MySQL-запрос, кажется, дает разные результаты при обертке в perl DBI

mysql> SELECT COUNT(l.ID), a.MAX_PER_PRD, a.PLURAL, d.TIME_DENOM FROM logro l, challenge c, lib_accomp_type a, lib_deporte d WHERE l.PERIOD=3 AND l.GAME_ID=2 AND l.PLR_ID=3 AND l.ACC_TYPE_ID=11 AND a.sport=d.ID AND c.ACC_TYPE_ID=a.ID AND l.ACC_TYPE_ID=c.ACC_TYPE_ID; 

+-------------+-------------+--------------------+------------+ 
| COUNT(l.ID) | MAX_PER_PRD | PLURAL    | TIME_DENOM | 
+-------------+-------------+--------------------+------------+ 
|   0 |   3 | general commodities| quarter | 
+-------------+-------------+--------------------+------------+ 
1 row in set (0.01 sec) 

Однако, когда я оберните его в perl-> DBI хэндле и принести его с $ sth-> fetchrow_array второе значение не определено.

my $q = "SELECT COUNT(l.ID), a.MAX_PER_PRD, a.PLURAL, d.TIME_DENOM 
      FROM logro l, challenge c, lib_accomp_type a, lib_deporte d 
      WHERE l.PERIOD=? 
      AND l.GAME_ID=? 
      AND l.PLR_ID=? 
      AND l.ACC_TYPE_ID=? 
      AND a.sport=d.ID 
      AND c.ACC_TYPE_ID=a.ID 
      AND l.ACC_TYPE_ID=c.ACC_TYPE_ID"; 

    my $sth = $dbh->prepare($q); 
    $sth->execute(3, 2, 3, 11); 
    my ($CNT, $MAX, $ANAMEP, $TD) = $sth->fetchrow_array; 

    print "COUNT: ", $CNT; 
    print "MAX: ", $MAX; 

$ perl test_sql2.pl 
Use of uninitialized value $MAX in print at test_sql2.pl line 29. 
COUNT: 0MAX: 

Любая идея относительно того, что я могу делать неправильно?

ответ

2

В зависимости от вашей клиентской/библиотечной версии mysql mysql обрабатывает эту ситуацию по-разному.

< Для MySQL = 5.6 см Group By Handling

Для MySQL = 5,7 см Group By Handling

Вы запрос имеет счетчик 0, но есть возвращаемые значения для других столбцов. Это, похоже, не имеет никакого смысла. Кажется, что выполнение perl фактически делает логическую вещь, а mysql просто заполняет столбцы MAX_PER_PRD, PLURAL, TIME_DENOM с произвольными значениями.

Основная проблема здесь заключается в том, что вы ссылаетесь на неагрегированные столбцы, не считая их частью предложения group by.

Возможно, если вы включите образец данных, это поможет нам получить результат, который вы ищете.

+0

Я сдался и разделил его на два разных вопроса. – gatorreina

 Смежные вопросы

  • Нет связанных вопросов^_^