2017-08-03 8 views
-1

2つのデータベースをmysqlクエリに接続しようとしています。SELECT 2 1つのリストで2つのWebサイト注文を得るための同じデータベース

その後、適切なデータベースの中の注文に関するデータを探して、そこからmeta_valueを取得しようとします。

しかし、それはmeta_value $ファーストネームを混在させ、時にはそれらを行に複製します。

データベースが1つしか接続されていない場合、それらは必要に応じて出力されます 誰かが間違っていることを見ることができますか?例に

URL:https://でhttp://kundeservice.coalsmile.com/test4.php

<?php 
$servername = "xxx"; 
$username = "xxx"; 
$password = "xxx"; 


    $v1 = "coalsmil_wp282"; 
    $v2 = "coalsmil_wp111"; 
    $v3 = "coalsmil_wp72"; 
    $v4 = "coalsmil_wp193"; 
    $v5 = "coalsmil_wp555"; 
    $v6 = "coalsmil_wp366"; 
    $v7 = "coalsmil_wp74"; 
    $v8 = "coalsmil_wp721"; 
    $v9 = "coalsmil_wp924"; 
    $v10 = "coalsmil_wp253"; 


     // Create connection 
    $conn = new mysqli($servername, $username, $password); 

    // Check connection 
     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 
     echo "Connected successfully"; 

    //Here I connect to both databases 
    $query103 = mysqli_query($conn, "SELECT * FROM `$v1`.`wpd2_posts` 
     where post_status='wc-processing' or post_status='wc-completed' 
      or post_status='wc-failed' UNION 
    SELECT * FROM `$v2`.`wpd2_posts` 
     where post_status='wc-processing' or post_status='wc-completed' 
     or post_status='wc-failed' order by post_date DESC ") or   die(mysqli_error($conn)); 



?> 

<br> 
    <h2>Database 3</h2> 

<table style="width: 100%"> 
      <tr> 
      <td>ID</td> 
      <td>??</td> 
      <td>??</td> 
      <td>??</td> 
      <td>??</td> 
      <td>??</td> 


      </tr> 
    <?php 
     while($row = mysqli_fetch_array($query103))   
     { 


      // Here I try to find what database the customer is on 
       $id2 = $row['ID']; 

       if($row['ID'] == ''){ 

        echo "intet id"; 
       }else { 

        $query = mysqli_query($conn, "SELECT * FROM `$v1`.`wpd2_posts` where ID = '$id2' ORDER BY id") or die(mysqli_error($conn));  

          if(mysqli_num_rows($query) == '') { 

           $query = mysqli_query($conn, "SELECT * FROM `$v2`.`wpd2_posts` where ID = '$id2' ORDER BY id") or die(mysqli_error($conn));  

          if(mysqli_num_rows($query) == '') { 

         }else{ 
           $version = "coalsmil_wp111"; 

          } 

         }else{ 
           $version = "coalsmil_wp282"; 

          } 


       } 

       echo "<tr>"; 
       echo "<td>". $row['ID']."</td>"; 
       echo "<td>". $row['post_date']."</td>"; 
       echo "<td>". $row['post_status']."</td>"; 

          //And here I try to get the data out 


             $querynavn = mysqli_query($conn, "SELECT meta_value FROM `$version`.`wpd2_postmeta` where meta_key='_shipping_first_name' and post_id='$id2' ") or die(mysqli_error($conn)); 
        while($row2 = mysqli_fetch_array($querynavn))   
        { 
       $fornavn = urldecode($row2['meta_value']); 
       } 
      echo "<td>". $fornavn."</td>"; 
       echo "<td>".$version."</td>"; 
       echo "<td>6</td>"; 
       echo "</tr>"; 

     } 


     ?> 
</table> 

答えて

1

あなたは接続している場合は、両方の接続を1以上から物事を選択するために、スキーマ(データベース名)を指定することができ、同じデータベースサーバー上にあります。テーブルの名前の代わりにschema_name.table_nameを使用してこれを行います。

だから、のように:あなたのケースで

SELECT * FROM schema_name.wpd2_posts WHERE ... 

あなたはすべて一緒にそれを置くためにUNIONを使用することができます側で

SELECT * FROM `schema1.wpd2_posts` 
    where post_status='wc-processing' or post_status='wc-completed' 
    or post_status='wc-failed' UNION 
SELECT * FROM `schema2.wpd2_posts` 
    where post_status='wc-processing' or post_status='wc-completed' 
    or post_status='wc-failed' order by post_date DESC LIMIT 10 

は、あなたが使用してこのクエリはもう少し読みやすくする可能性があり注意しますIN()あなたのcriteraのための節:

+0

回答ありがとうございます。しかし、それは私にこのエラーを与える。 UNIONとORDER BYの不正な使用 –

+0

私の悪いです。 order by節は最後に一度だけ置くべきです。 – Cfreak

+0

私は私の答えを編集しました。 'ORDER BY'と' LIMIT'が結果に適用され、 'LIMIT 10 'にすると、2つのテーブルの間でブレンドされます。明示的に各テーブルから5が必要な場合は、 'UNION'が機能しない可能性があり、依然として2つの別個のクエリを持つ必要があります。 (あなたはまだ1つの接続でそれらを行うことができます) – Cfreak

関連する問題