Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / (PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза / 5 сообщений из 5, страница 1 из 1
23.12.2005, 13:26:35
    #33454342
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
Привет!

Столкнулся с небольшой проблемой при использовании CREATE TEMPORARY TABLE.

Ниже скрипт (надеюсь этого будет достаточно):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
// ...
// обновляем таблицу-отношений, если появляются новые записи в таблице-справочнике

$sink->refreshRelation($sink_id);

// ...

/**
 * Проверяет наличие новых записей в таблице-справочнике.
 * Возвращает кол-во добавленных новых записей в таблицу-отношений, false - в случае ошибки.
 *
 * @param   integer     $id         ИД записи мойки id_sink
 *
 * @return  integer
 */
    function refreshRelation($id)
    {
        if (!$this->sql->sql_exec("CREATE TEMPORARY TABLE t_1 as SELECT $this->fkey FROM $this->tablename WHERE id_sink='$id'"))
        {
            trigger_error($this->raiseError(__FUNCTION__), E_USER_ERROR);
            return false;
        }

        if (!$this->sql->sql_exec("SELECT mt.$this->fkey FROM $this->manual_tablename mt LEFT JOIN t_1 ON mt.$this->fkey=t_1.$this->fkey WHERE t_1.$this->fkey is null"))
        {
            trigger_error($this->raiseError(__FUNCTION__), E_USER_ERROR);
            return false;
        }
        
        if (!$this->sql->num_rows())
        {
            return  0 ;
        }
        
        $query = "INSERT INTO $this->tablename (id_sink, $this->fkey) VALUES ";

        while($row=$this->sql->fetch_array())
        {
            $query.= "('$id', '{$row[ $this->fkey ]}'), ";
        }
        $query = substr($query,  0 , strrpos($query, ','));     // удаляем из строки последнюю , (запятую)

        if (!$this->sql->sql_exec2($query))
        {
            trigger_error($this->raiseError(__FUNCTION__), E_USER_ERROR);
            return false;
        }
        
        return $this->sql->affected_rows();
    }

Смотрю в лог-обновлений, а там следующее:
Код: plaintext
1.
2.
3.
4.
5.
# Time: 051223 13:06:26
# User@Host: sergei[sergei] @ localhost [127.0.0.1]
CREATE TEMPORARY TABLE t_1 as SELECT id_color FROM sinks_colors WHERE id_sink='1';
# User@Host: sergei[sergei] @ localhost [127.0.0.1]
CREATE TEMPORARY TABLE t_1 as SELECT id_color FROM sinks_colors WHERE id_sink='1';

Непонятно почему запрос CREATE TEMPORARY ... выполняется 2 раза.
Подскажите с чем это может быть связано и куда копать.

P.S. MySQL 4.1
P.S.S. Если что непонятно, то задавайте вопросы. :)
...
Рейтинг: 0 / 0
23.12.2005, 17:37:18
    #33455143
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
попробуй занести результат экзека во временную переменную, и уже её проверять в ифе.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
26.12.2005, 10:47:43
    #33456860
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
> попробуй занести результат экзека во временную переменную, и уже её проверять в ифе

Не помогло. Оказывается все дело не в скрипте, а в MySQL.

Например, такой запрос будет выполнен/записан в лог 2 раза:
Код: plaintext
1.
create temporary table t1 as select user();
Код: plaintext
1.
2.
3.
4.
# Time: 051226 10:27:59
# User@Host: sergei[sergei] @ localhost [127.0.0.1]
create temporary table t1 as select user();
# User@Host: sergei[sergei] @ localhost [127.0.0.1]
create temporary table t1 as select user();

А уже такой нет:
Код: plaintext
1.
create temporary table t2 (
 foo int not null)
...
Рейтинг: 0 / 0
26.12.2005, 13:05:45
    #33457308
Anjey aka PM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
ежу понятно:

запрос один но выполняется в 2 этапа:

1. Создание временной таблицы (собсно)
2. Заливка в нее данных из селекта.
...
Рейтинг: 0 / 0
26.12.2005, 13:12:47
    #33457326
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
Anjey aka PMежу понятно:

запрос один но выполняется в 2 этапа:

1. Создание временной таблицы (собсно)
2. Заливка в нее данных из селекта.
Псб, догадывался, что так и происходит, но почему-то казалось, что это где-то глюк. :))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / (PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]