2015-01-23 5 views
1

После долгих попыток мне нужен ваш совет.php sql UPDATE с вложенным FROM (SELECT)

Я хочу объединить строки из 2 таблиц. После того, как я создал новую строку в таблице1, я хочу найти строку в таблице2 и объединить некоторые из полей.

Если я ставлю вложенные ВЫБРАТЬ в функции SET (SET почтового индекса = (SELECT и т.д.) это работает, но если я ставлю его в FROM функции дает ошибку, что синтаксис является неправильным

моего код:

$sql = "INSERT INTO instanties(institution, category, postcode) 
     VALUES('$emapData[0]', '$emapData[1]', '$emapData[2]')"; 

if ($conn->query($sql) === TRUE) { 
    //get last added id 
    $last = $conn->insert_id; 

    //define WHERE function 
    $where="postcode_id=$postcode_id AND (minnumber <= $number AND maxnumber >= $number)"; 

    //UPDATE last added row in table with info from other table 
    $sql2 = "UPDATE instanties 
      SET postcode_id=pc.postcode_id 
      FROM 
      (
        SELECT postcode_id 
        FROM postcode 
        WHERE $where LIMIT 1 
      ) pc 
      WHERE id=$last"; 

      $result = $conn->query($sql2); 
      if ($result) { 
       echo 'update is done<br/><br/>'; 
      } 
     } 
     else { 
      echo "Error: " . $sql2 . "<br>" . $conn->error.'<br/><br/>'; 
     } 
    } 
    else { 
     echo "Error: " . $sql . "<br>" . $conn->error.'<br/><br/>'; 
    } 
+1

Показать сообщение об ошибке –

+0

Просто для аргументации 'sql =" INSERT INTO' отсутствует '' '' '' '' 'sql''. –

+0

да, это мой первый пост на этом форуме, и система не хотела см. эту строку как код до тех пор, пока я не удалю $ (возможно, мой плохой) –

ответ

1

это не действительный синтаксис MySQL Вы не можете добавить «FROM» пункта к обновлению состояния Мент. http://dev.mysql.com/doc/refman/5.0/en/update.html

Однако то, что вы хотите достичь еще можно так:

$sql2 = "UPDATE instanties 
     SET postcode_id= 
     (
       SELECT postcode_id 
       FROM postcode 
       WHERE $where LIMIT 1 
     ) 
     WHERE id=$last"; 

Пока есть только один результат из вложенной SELECT (и ваш LIMIT 1 любопытное делает это).

EDIT: Если вам нужны много полеев из таблицы почтового индекса, вы можете присоединиться к нему на:

$sql2 = "UPDATE instanties as i 
     JOIN (
      SELECT * 
      FROM postcode 
      WHERE $where LIMIT 1 
     ) as pc 
     SET i.postcode_id=pc.postcode_id 
     WHERE i.id=$last"; 

Мы обычно использовать «ON» пункт с объединением, но так как вы только обновление 1, а ваш вложенный SELECT также будет возвращать только 1 строку, это не обязательно.

+0

спасибо! Я знаю, что это тоже работает, но мне нужно установить множество других полей, вот почему я подумал, что может быть лучшее решение. Может быть, есть лучшее решение? –

+0

Я обновил свой ответ – Naomi

+0

ты спас мой день! –

0

попробовать это:.

$sql2 = "UPDATE instanties 
     SET postcode_id=(
       SELECT postcode_id 
       FROM postcode 
       WHERE $where LIMIT 1) 
     WHERE id=$last"; 
+0

спасибо! Я знаю, что это тоже работает, но мне нужно установить множество других полей, вот почему я думал, лучшее решение. –