2013-06-04 5 views
0

Я хочу, чтобы вставить значение таблицы 1 в таблицу 2, где столбцы в таблице 2 существуют в таблице 1. Для получения дополнительной справки см этой таблицы:Вставить в другую таблицу, где существуют столбцы в таблице 2

Таблицы 1

+----------+----------+----------+ 
| col_1 | col_2 | col_3 | 
+----------+----------+----------+ 
| col_val | col_val | col_val | 
| col_val | col_val | col_val | 
| col_val | col_val | col_val | 
| col_val | col_val | col_val | 
+----------+----------+----------+ 

Таблица 2

+----------+----------+----------+----------+----------+ 
| col_1 | col_2 | col_3 | col_4 | col_5 | 
+----------+----------+----------+----------+----------+ 
| col_val | col_val | col_val |   |   | 
| col_val | col_val | col_val |   |   | 
| col_val | col_val | col_val |   |   | 
| col_val | col_val | col_val |   |   | 
+----------+----------+----------+----------+----------+ 

Если столбцы в таблице 2, не существует в таблице 1 он вставляет нулевое значение.

Заранее благодарен!

+0

вставки в динамично –

+0

Какие столбцы из таблицы 1, собираются в какие столбцы в таблице 2? – Pudge601

+0

col_1, col_2, col_3, col_4 и col_5 - это имена столбцов. Итак, table_1.col_1 переходит в table_2.col_1, table_1.col_2 переходит в таблицу_2.col_2, то же самое в col_3 –

ответ

0

Попробуйте это:

<?php 
$con=mysqli_connect("yourhost", "username", "password", "your_db"); 
if(!$con){ 
    //error  
} 

$query1="select * from table1 limit 1"; 
$query2="select * from table2 limit 1"; 

$result1=mysqli_query($con, $query1); 
$result2=mysqli_query($con, $query2); 


if(!$result2 || !$result1){ 
    //query error  
} 

$table1_columns=array_keys(mysqli_fetch_assoc($result1)); 
$table2_columns=array_keys(mysqli_fetch_assoc($result2)); 

$intesection=array_intersect($table1_columns, $table2_columns); 


if(is_array($intesection) && !empty($intesection)){ 
    $query="insert into table2 ("; 
    foreach($intesection as $column){ 
     $query.=" $column,"; 
    } 

    $query=substr($query, 1,-1); //to remove the last comma 
    $query.=") select "; 

    foreach($intesection as $column){ 
     $query.=" $column,"; 
    } 
    $query=substr($query, 1,-1); //to remove the last comma 
    $query.=" from table1 ;";  
} 

echo $query; //check the query 
+0

спасибо, я проверю его позже, он выглядит хорошо :) –

+0

минут исправления @ImperialJonas – Bere

+0

Большое спасибо господину, этот код работает thumbsup для Mr.Bere –

0

Вы можете установить значение по умолчанию для цв 4 & седловины 5 до NULL, а затем запустить этот запрос:

INSERT INTO table1 (col1, col2, col3) 
SELECT col1, col2, col3 FROM table2; 

Он должен работать, но вы должны явно указать столбцы общих между этими двумя таблицами.

+0

Я хочу, чтобы он вставлялся динамическим способом, когда я не буду указывать имена столбцов, допустим, у меня есть MAIN_TABLE, тогда у меня есть 4 или 5 подкадров –

+0

В этом случае , Я думаю, вам нужно попробовать smthg с таблицей INFORAMTION_SCHEMA. Посмотрите это http://stackoverflow.com/a/6445680/2119117 или это http://msdn.microsoft.com/en-us/library/ms186778.aspx – Lebugg

+0

, это долгий и трудный путь, но спасибо в любом случае :) –

Смежные вопросы