[英]make a temporary table and select from it
当我运行这个时,我收到一个错误'未声明的变量:temp'
<?php
$maketemp = "CREATE TEMPORARY TABLE temp(`itineraryId` int NOT NULL, `live` varchar(1), `shipCode` varchar(10), `description` text, `duration` varchar(10), PRIMARY KEY(itineraryId))";
mysql_query( $maketemp, $connection ) or die ( "Sql error : " . mysql_error ( ) );
$inserttemp = "SELECT live, id AS itineraryId, ship AS shipCode, description AS description, duration AS length FROM cruises WHERE live ='Y' INTO temp";
mysql_query( $inserttemp, $connection ) or die ( "Sql error : " . mysql_error ( ) );
$select = "SELECT intineraryId, shipCode, description, duration FROM temp";
$export = mysql_query ( $select, $connection ) or die ( "Sql error : " . mysql_error( ) );
有任何想法吗 ?
请不要在新代码中使用mysql_*
函数 。 它们不再维护, 并且已被正式弃用 。 看到红色的盒子 ? 了解准备好的语句 ,并使用PDO或MySQLi - 本文将帮助您确定哪些。 如果您选择PDO, 这是一个很好的教程 。
这段代码应该有效:
<?php
$maketemp = "
CREATE TEMPORARY TABLE temp_table_1 (
`itineraryId` int NOT NULL,
`live` varchar(1),
`shipCode` varchar(10),
`description` text,
`duration` varchar(10),
PRIMARY KEY(itineraryId)
)
";
mysql_query($maketemp, $connection) or die ("Sql error : ".mysql_error());
$inserttemp = "
INSERT INTO temp_table_1
(`itineraryId`, `live`, `shipCode`, `description`, `duration`)
SELECT `id`, `live`, `ship`, `description`, `duration`
FROM `cruises`
WHERE `live` = 'Y'
";
mysql_query($inserttemp, $connection) or die ("Sql error : ".mysql_error());
$select = "
SELECT `itineraryId`, `shipCode`, `description`, `duration`
FROM temp_table_1
";
$export = mysql_query($select, $connection) or die ("Sql error : ".mysql_error());
我想你会用临时表做更多的东西,或者只是玩它,但如果不知道整个代码可以总结为:
<?php
$query = "
SELECT `id` AS 'itineraryId', `ship`, `description`, `duration`
FROM `cruises`
WHERE `live` = 'Y'
";
$export = mysql_query($query, $connection) or die ("Sql error : ".mysql_error());
我喜欢使用heredoc来帮助我构建嵌入式sql查询(只是为了帮助制作任何微妙的错误); 所以你的第一个查询看起来像这样:
$maketemp =<<<s
CREATE TEMPORARY TABLE temp(
`itineraryId` int NOT NULL,
`live` varchar(1),
`shipCode` varchar(10),
`description` text,
`duration` varchar(10),
PRIMARY KEY(itineraryId));
s;
然后,如果要更正第二个查询而不列出要插入记录的表的字段,则必须按相同的顺序列出字段。
这次只是查询:
INSERT INTO temp
SELECT id, live, ship, description, duration
FROM cruises
WHERE live = 'y';
关于临时变量的最后一件事是:查看关于其可见性的部分。 您可以在创建表时使用TEMPORARY关键字。 TEMPORARY表仅对当前连接可见,并在关闭连接时自动删除。 http://dev.mysql.com/doc/refman/5.5/en/create-table.html
这意味着:当你直接连接到MySQL时,例如通过这样的命令行界面:
mysql> #our query here line-by-line
只要您的会话处于活动状态,您就可以通过所有多个查询实现相同的连接。
但是在外部脚本(例如PHP)中,仅仅因为它位于同一个脚本文件中并不一定意味着它是相同的连接,因此当您执行插入查询时,您的临时表对该连接不可见会话。
尝试连接所有查询,在单个命令/查询执行中发送所有查询。
祝好运。
第二个查询不正确。
从参考 -
MySQL Server不支持SELECT ... INTO TABLE Sybase SQL扩展。 相反,MySQL Server支持INSERT INTO ... SELECT 。 标准的SQL语法,这基本上是一回事。
试试这个 -
INSERT INTO temp
SELECT live
, id AS itineraryId
, ship AS shipCode
, description AS description
, duration AS length
FROM
cruises
WHERE
live = 'Y'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.