Вопрос по php, mysql – сделать временную таблицу и выбрать из нее

9

Я получаю необъявленную переменную ошибки: temp & reg; когда я запускаю это ...

<?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( ) );

Есть идеи ?

Это также говорит вам, по какой линии? Ahatius
да, мне тоже нужно поместить поле длины, хорошо заметили @DaveRandom Rich
Где сделалAS length родом из? Вы не создали столбецlength во временной таблице ... (не то, что это может исправить ошибку) DaveRandom
Я думаю, что вам может понадобиться сделать выбор в том же запросе, что и при создании. Tom Hallam
в какой строке не указано, только ошибка Sql: необъявленная переменная: temp Rich

Ваш Ответ

3   ответа
0

Второй запрос не верен.

Из ссылки -

MySQL Server doesn't support the SELECT ... INTO TABLE Sybase SQL extension. Instead, MySQL Server supports the INSERT INTO ... SELECT. standard SQL syntax, which is basically the same thing.

Попробуйте это вместо этого -

INSERT INTO temp
SELECT live
     , id AS itineraryId
     , ship AS shipCode
     , description AS description
     , duration AS length
FROM
  cruises
WHERE
  live = 'Y'
1

Мне нравится использовать 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;

Затем, если вы хотите исправить второй запрос, не перечисляя поля таблицы, в которую вы хотите вставить записи, вы должны перечислить поляin the same order.

Просто запрос на этот раз:

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

Затем вы, по сути, используете одно и то же соединение через все ваши многочисленные запросы, пока сеанс активен.

But во внешнем скрипте (например, в PHP) только потому, что он находится в одном и том же файле скрипта, не обязательно означает, что это одно и то же соединение, так что к тому времени, когда вы выполняете запрос вставки, ваша временная таблица не видна на этот сеанс связи.

Попробуйте объединить все запросы, отправьте все это в рамках одной команды / выполнения запроса.

Удачи.

12

Please, don't use mysql_* functions in new code, Они больше не поддерживаютсяи официально устарели, Увидетьred box? Узнать оprepared statements вместо этого и использовать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());
Я только что внес небольшое изменение в приведенный выше код, попробуйте еще раз (в вашем последнем случае произошла орфографическая ошибка)SELECT - ищите внимательноn)
хорошо, я попробовал это, и он выдает ту же ошибку Sql: Неизвестный столбец & quot; intineraryId & apos; в «поле списка» Rich
получил тебя ... дополнительный n! идеально @DaveRandom, ты мужчина! Слава :) Rich

Похожие вопросы