Работающий MySQL Query терпит неудачу в Perl

0

У меня есть запрос, который при запуске из phpMyAdmin работает, однако, когда он интегрирован в веб-сайт, написанный на Perl, он терпит неудачу и выдает ошибки. Оба они запускаются с соединением с одной базой данных и со стороны кодирования/форматирования при интеграции в Веб-сайт, все правильно и аналогично другим запросам.

Любая помощь с этим будет очень оценена - Спасибо!

Запрос MySQL:

CREATE TEMPORARY TABLE tmp_lecture_days (
timeslot_id int(50)
);
INSERT INTO tmp_lecture_days (timeslot_id)
SELECT DISTINCT tab_appointment.timeslot_id
FROM tab_appointment WHERE lecture_id = '1115';
SELECT COUNT(timeslot_id)
FROM tmp_lecture_days;

Запрос MySQL в Perl:

            $query
                = &statement_database(
                    "CREATE TEMPORARY TABLE tmp_lecture_days (
                    timeslot_id int(50)
                    );
                    INSERT INTO tmp_lecture_days (timeslot_id)
                    SELECT DISTINCT tab_appointment.timeslot_id
                    FROM tab_appointment WHERE lecture_id = '1115';
                    SELECT COUNT(timeslot_id)
                    FROM tmp_lecture_days;");

             my ($days) = $query->fetchrow_array;

Журнал ошибок:

7.3.2011 10:14:12 Ошибка У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '; 7.3.2011 10:14:12 ошибка INSERT INTO tmp_lecture_days (timeslot_id) 7.3.2011 10:14:12 ошибка SELECT DISTINCT tab_appoi 'в строке 3

Теги:
phpmyadmin

2 ответа

3
Лучший ответ

Я думаю, что следующий запрос эквивалентен 3 запросам:

SELECT COUNT(DISTINCT timeslot_id) FROM tab_appointment
    WHERE lecture_id = '1115'

Подробнее см. справочное руководство по MySQL для COUNT() здесь.

  • 0
    Или это также может сработать - я попытался объединить, но по какой-то причине это пошло не так. Сравнивая вашу короткую версию с моей, только что оказалось, что я получил скобку на неправильной стороне DISTINCT - Спасибо, куча XD
8

Если вы используете DBI для выполнения запроса, вам не разрешено вставлять в него несколько инструкций. Попробуйте поместить CREATE TABLE ... в один запрос и INSERT ... в другой.

  • 0
    Хотя я думал, что это может быть проблемой, я создаю там временную таблицу, поэтому не будет ли закрытие первого запроса также удалять временную таблицу? Переход на этот способ будет означать 4 запроса для каждой записи (четвертый - таблица удаления, созданная в первом запросе). Это может вызвать проблемы с синхронизацией в длинном списке, так как вы увеличиваете сумму в четыре раза.
  • 4
    Временная таблица переживает целое соединение. Просто убедитесь, что вы запрашиваете одно и то же соединение и не устанавливаете новое соединение для каждого оператора.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню