CREATE TEMPORARY TABLE mysql (создать временную таблицу,)
чтобы создать временную таблицу, копию уже существующей, используйте выражение (несколько примеров) =
CREATE TEMPORARY TABLE new_t LIKE old_t;
CREATE TEMPORARY TABLE 123_avto AS ( SELECT * FROM avto );
где
new_t = это имя новой таблицы
а
old_t = это имя старой (уже существующей в вашей базе данных)таблицы
База данных MySQL допускает создание временных таблиц.
Поскольку mysql не поддерживает вложенные SELECT, можно разбить один сложный SELECT на несколько простых с использованием временных таблиц.
В данном примере мы будем использовать временную таблицу для хранения IP-адресов посетителей из четырех полей:
id_ip — первичный ключ таблицы;
ip — IP-адрес посетителя;
id_user— вторичный ключ, устанавливающий дополнительную связь с таблицей посетителей users. В таблице users этот ключ выступает в качестве первичного;
puttime — время посещения.
Допустим, нам надо выбрать последний IP-адрес для каждого посетителя и время, когда он с него зашел. Можно поступить в два этапа. Сначала выбрать вторичные ключи пользователей id_user и соответствующее им время последнего посещения, а затем в цикле выбрать соответствующие им IP-адреса.
Выбор IP-адреса каждого посетителя и времени посещения
Устанавливаем соединение с базой данных
include "config.php";
// Формируем SQL-запрос
$query ="SELECT DISTINCT(id_user) AS id_user,
MAX(puttime) AS max_time
FROM ips
GROUP BY id_user";
// Выполняем SQL-запрос
$first = mysql_query($query);
if($first)
{
while($res = mysql_fetch_array($first))
{
// В цикле формируем второй SQL-запрос
$query ="SELECT * FROM ips
WHERE id_user = ". $res[`id_user`]."
AND puttime=".$res[`max_time`];
$final = mysql_query($query);
$result = mysql_fetch_array($final);
echo $result[`ip`]."-".$result[`puttime`]."
";
}
}
?>
Недостатком такого подхода является выполнение второго запроса в цикле,
что может создать серьезную нагрузку на сервер MySQL. Выходом из этой
ситуации будет создание временной таблицы с результатами первого запроса,
как это показано ниже.
Создание временной таблицы с результатами запроса
$query ="CREATE TEMPORARY TABLE temp_table
SELECT id_user, puttime, ip FROM ips
ORDER BY id_user,time DESC";
if(mysql_query($query))
{
$sel ="SELECT id_user, puttime, ip
FROM temp_table GROUP BY id_user";
$res = mysql_query($sel);
if ($res)
{
while($result = mysql_fetch_array($res))
{
echo $result["id user"]." ".$resultf"puttime"]." ".$result["ip"]."
”;
}
}
}
?>
Как видно из листинга, выполнение второго SQL-запроса вынесено из тела
цикла. После выполнения скрипта таблица temp_table, созданная в памяти, будет
уничтожена автоматически.


