INSERT INTO..... ВЫБРАТЬ ИЗ

Я хочу поставить calory как первое значение fruitsЯ не мог этого сделать, кто-нибудь может помочь?

   $sql = 'INSERT INTO fruits VALUES('', ?, ?, ?)'
          SELECT calory
          FROM diet
          WHERE fruit = ?
         ';

   $this->db->query($sql, array($a, $b, $c, $d));

5 ответов

Решение

Правильный синтаксис:

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2"

в вашем случае это должно быть:

INSERT INTO fruits (calory)
SELECT calory
FROM diet
WHERE fruit = ?

(если "калория" - это название столбца в таблице "фрукты")

Когда вы используете заполнители для значений, (в вашем случае знаки вопроса) вам нужно использовать ->prepare(), а не ->query(). Также ваш синтаксис SQL совершенно неверен. Я думаю, что ваш запрос должен выглядеть примерно так...

$sql = "INSERT INTO fruits VALUES('', ?, ?, ?) WHERE fruit = ?"; // Create query string.

$sth = $this->db->prepare($sql); // Prepare the query.
$sth->bindValue(1,$a); // Bind question marks to values
$sth->bindValue(2,$b); // (I am assuming that a,b,c,d are in
$sth->bindValue(3,$c); // the correct order...
$sth->bindValue(4,$d);
$sth->execute(); // Execute the query to insert the data.

Это

INSERT INTO fruits SELECT calory, ?, ?, ? FROM diet WHERE fruit = ?

должен сделать это...

Вы не можете перепутать INSERT ... SELECT а также INSERT ... VALUES в одном запросе. Просто выберите другие значения в качестве констант в вашем SELECT Скажите и у вас все будет хорошо

INSERT INTO fruits
  SELECT calory, ?, ?, ?
  FROM diet
  WHERE fruit = ?

Вы имеете в виду, что вам нужно поместить ответ на выбранный запрос в запрос вставки, пожалуйста, попробуйте это

$sql = 'INSERT INTO fruits VALUES('(SELECT calory
      FROM diet
      WHERE fruit = ?)', ?, ?, ?)'

     ';
Другие вопросы по тегам