powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / (PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
5 сообщений из 5, страница 1 из 1
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
    #33454342
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Столкнулся с небольшой проблемой при использовании 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
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
    #33455143
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй занести результат экзека во временную переменную, и уже её проверять в ифе.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
    #33456860
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> попробуй занести результат экзека во временную переменную, и уже её проверять в ифе

Не помогло. Оказывается все дело не в скрипте, а в 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
(PHP, MySQL) CREATE TEMPORARY TABLE выполняется два раза
    #33457308
Anjey aka PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ежу понятно:

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

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

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

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


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