2016-07-13 4 views
0

DBに2つのテーブルがあります(table_1table_2)、それぞれにNameという相互の列があります。この場合のUNIONの使用方法(MySQL)

私は現在、唯一のtable_1から(statusName)いくつかのデータをインポートするには、次のコードを使用しています:

/* database section start */ 
    $mysqli = new mysqli("z","z","z","z"); 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 
/* database section end */ 

// Choose Relevant items, and turn them into an array 
$item_array = array(
'item1', 
'item2', 
'item3' 
); 

//implode items, turn into string 
$item_implode = join("','", $item_array); 

//declare an overall array for result 
$product = array(); 

$result = $mysqli->query("SELECT Name, Status as status from table_1 where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode');"); 

while($row = $result->fetch_assoc()) { 

    $product_name = $row['Name']; 
    // find all keys in $item_array which value is the products 
     $keys = array_keys($item_array, $product_name); 
    foreach ($keys as $key) { 

     // add values for these keys 
     $product[$key + 1]["Name"] = $row['Name']; 
     $product[$key + 1]["status"] = $row['status'];// 

    } 
} 

私もtable_2からデータをインポートしたい場合、私は、このコードに何を追加する必要があります(たとえば、 、color,date_addedという列)?

$product[$x]["Name"] 
$product[$x]["status"] 
$product[$x]["color"] 
$product[$x]["date_added"] 

EDIT:

長いスレッドが私の質問に答えていないこと

私の目的は、これらのキーを持つことです。コードは私が使用しているコードと似ていないので、この具体的なケースではUNIONを正確に適用する方法を知りたいと思います。

私が使用して試してみた:

$result = $mysqli->query 

("(SELECT Name, status as status from table_1) 

UNION 

(SELECT Name, color as color from table_2) 

where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode');"); 


while($row = $result->fetch_assoc()) { 

をしかし、私は最後の行に致命的なエラーが発生します。

EDIT2:

まだ取得エラー:

$result = $mysqli->query 

("(SELECT Name, status as statu table_1 where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode')) 
UNION (SELECT color from table_2 where Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode'));"); 

while($row = $result->fetch_assoc()) { 
+0

使用 'UNION'(http://dev.mysql.com/doc/refman/5.7/en/union.html) – rokas

答えて

1
$result = $mysqli->query("SELECT table_1.Name, table_1.Status,table_2.color,table_2.date_added from table_1 inner join table_2 on table_1.Name=table_2.Name where table_1.Name IN ('$item_implode') ORDER BY FIELD (Name, '$item_implode');"); 
1
(SELECT Name, Status as status FROM table_1 t1) 
UNION 
(SELECT color, date_added FROM table_2 t2) 
+0

T1 T2は何ですか? – rockyraw

+0

私の編集した質問を参照してください、私はどのようにそのUNIONを適用するか分からなかった。 – rockyraw

+0

ここで/ order等の句がどこにあるかを選択してください: '' '(SELECT名、状態はステータスFROM table_1 t1 ... where order by ...) UNION (SELECT color、date_added FROM table_2 t2 where ... order by ...) '' ' – rokas

0

があなたのクエリを変更し、使用しよう:INNER JOIN table_2

私が作るcan`t私はあなたのデータを持っていないので、あなたのための質問...

0

結合を使用してクエリを作成します。

$query="SELECT t1.Name, t1.Status as status, t2.color, t2.date_added) from " 
    ."table_1 t1 " 
    ."LEFT JOIN table_2 t2 ON t2.Name " 
    ."where t1.Name IN ('$item_implode') " 
    ."AND t2.Name = t1.Name " 
    ."ORDER BY FIELD (t1.Name, '$item_implode');"; 
+0

可能であれば、私のコード全体の構造を変更しない解決策を好む – rockyraw

関連する問題