0

私はこの3つのテーブルRetailer、imovo、rbpos_eposを持っています。私がしていることは、それらを一致させ、ページに印刷する結果を取得することです。

私がする必要があるのは、これらの結果を新しいテーブルに挿入することです。小売業者と imovo の 2 つのテーブルを照会する「一致」ボタンを作成し、一致は :matching という名前の新しいテーブルに移動します。

重複を避けるために必要なのは、小売業者のテーブルから削除し、一致した行をimovoすることです..

一致させるために使用するクエリは次のとおりです。

 $data = mysql_query( "select r.`time`, r.`epos_id`, r.`date`,re.`location`,i.`user_id`,i.`mobile_number`,
       i.`time`, i.`rbpos_id`, i.`date`
from retailer r
join rbpos_epos re on r.epos_id = re.epos_id
join imovo i on i.rbpos_id = re.rbpos_id
             and addtime(r.`time`, '0:0:50') > i.`time`
             and r.`time` < i.`time`
             and r.`date` = i.`date`;
") 
 or die(mysql_error()); 
 Print "<table border cellpadding=3>"; 
  Print "<tr>"; 
 Print "<th>Date:</th>
<th>Time</th>
<th>Location</th>
<th>User ID</th> 
<th>Mobile Number</th>"; 
  Print "</tr>";
 while($info = mysql_fetch_array( $data )) 
 { 

   Print "<tr>"; 
 Print " <td>".$info['date'] . "</td>
<td>".$info['time'] . " </td>
<td>".$info['location'] . " </td>
<td>".$info['user_id'] . " </td>
<td>".$info['mobile_number'] . " </td>
</tr>"; 
 } 

印刷された行は、一致するテーブルに挿入する必要がある行です..ありがとう!

私はこれを試しました:

      $data = mysql_query( "INSERT INTO Matching(date, time, location, user_id, phone)
SELECT 
   r.`date`,
   `time`,
   re.`location`,
   i.`user_id`,
   i.`mobile_number`
from retailer r
join rbpos_epos re on r.epos_id = re.epos_id
join imovo i on i.rbpos_id = re.rbpos_id
and addtime(r.`time`, '0:0:50') > i.`time`
and r.`time` < i.`time`
and 

r. date= 私。date; ")しかし、私はエラーが発生します:

Column count doesn't match value count at row 1
4

1 に答える 1

0

使用INSERT INTO ... SELECT ...:

INSERT INTO Matching(date, time, location, user_id, phone)
SELECT 
   r.`date`,
   `time`,
   re.`location`,
   i.`user_id`,
   i.`mobile_number`
from retailer r
join rbpos_epos re on r.epos_id = re.epos_id
join imovo i on i.rbpos_id = re.rbpos_id
and addtime(r.`time`, '0:0:50') > i.`time`
and r.`time` < i.`time`
and r.`date` = i.`date`;

次にINSERT、ボタンmatchがクリックされたときにこれを行う必要があります。

更新:一致した行を削除する場合。DELETEJOINできます。何かのようなもの:

DELETE r, re, i
from retailer r
join rbpos_epos re on r.epos_id = re.epos_id
join imovo i on i.rbpos_id = re.rbpos_id
and DATE(r.`date`) = DATE(i.`date`);

マニュアルで説明されているように、これにより、3 つのテーブルすべてから一致したすべての行が削除されます。

複数テーブル構文の場合、DELETE は各 tbl_name から条件を満たす行を削除します。

SQL フィドルのデモ

注意:DATETIME 2 つの別々の部分dateではなく、1 つの列を使用する方が良いのでtime、デモで行ったようにします。次に、結合条件で行ったように、MySQL の日付と時刻の関数を使用してそれらを制御できますDATE(r.date) = DATE(i.date)

于 2012-12-03T08:20:35.750 に答える