0

私は3つのテーブルを持っています:

  1. SMS_IN「生の」番号を使用(データはSMSを介して送信されるため、すべての番号はSMS形式です。1つの番号にまとめるために「分解」しています):

    sms_text
    sender_number
    send_dt
  2. membersメンバーの携帯電話番号付き:

    メンバーID
    ユーザー名
    comp_id
    電話
  3. mobile_numbers_testすべての番号の表:

    メンバーID
    comp_id
    数字
    contact_number
    アクティブ

私は2つのチェックでSMS_IN(新しい番号)を(古い番号で)取得しようとしています:mobile_numbers_test

  1. SMS_IN.sender_number = members.phone; と
  2. SMS_IN.sender_number = mobile_numbers_test.contact_number AND SMS_IN.sms_text(分解形式で)の場合= mobile_numbers_test.numbers、スキップ(または上書き)-それ以外の場合INSERT

これは私がこれまでに持っているものです:

include ('database_connection.php');

$result = mysql_query("SELECT phone FROM members")
or die(mysql_error());  
$no=0;
echo'<table>
        <tr>
        <td>Numbers</th>
        <td>From</th>
        <td>Date</th>
        </tr>';
while($row = mysql_fetch_array($result))
    {$no++;
    $phone= $row['phone'];  
    $comp_id =  $row['comp_id'];
    $result1 = mysql_query("SELECT * FROM SMS_IN where sender_number ='$phone'")
    or die(mysql_error()); 
    while($row = mysql_fetch_array($result1))
        {$no++;
        $sms= $row['sms_text'];
        $sms_no=$row['sender_number'];
        $sms_time=$row['sent_dt'];
        $sms_exp = explode("\r\n",$sms);
        foreach($sms_exp as $no )
        { //** not working from here **//

        $result2 = mysql_query("SELECT * FROM members,mobile_numbers_test,SMS_IN 
        where members.phone = SMS_IN.sender_number and 
        mobile_numbers_test.numbers != '$no'
        ")
        or die(mysql_error());

        while($row = mysql_fetch_array($result2))
        {
        $circle=$row['state'];
        $price='Call Us';
        $contact_person=$row['Username'];
        $contact_number=$row['phone'];
        $type='Fancy';
        $per_post='Pre-Paid';
        $provider=$sms_exp[0];
        $date=strtotime($sms_time);
        $ip=$sms_no;
        $old_no=$row['numbers'];;

        if($old_no!=$no){ 
            echo '<tr><td>'.$no.'</td>';
            echo '<td>'.$contact_person.'</td></tr>';
        } else { echo 'Old No';
        }
        }
        }
        }

        }       
    echo'</table>'; 

この例ではecho、何が出てくるのかを知るために答えます...どうすればいいですUPDATEINSERT

4

1 に答える 1

1
  1. UNIQUEインデックスがまだ存在しない場合は、 mobile_numbers_teston で作成します。(contact_number, numbers)

    ALTER TABLE mobile_numbers_test ADD UNIQUE INDEX (contact_number, numbers);
    
  2. 結合基準で結合membersSMS_INます。

    SELECT * FROM members JOIN SMS_IN ON SMS_IN.sender_number = members.phone
    
  3. mobile_numbers_test結果セットをループし、数値を分解して usingに挿入しINSERT IGNOREます。すべてをまとめる (PDO を使用すると、生活が楽になるため、古いmysql_*関数を使用して新しいコードを記述するのは本当にやめるべきです。それらはもはや維持されておらず、コミュニティは非推奨プロセスを開始しています):

    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $user, $pass);
    
    $select = $dbh->query("
      SELECT * FROM members JOIN SMS_IN ON SMS_IN.sender_number = members.phone
    ") or die($dbh->errorInfo());
    
    $insert = $dbh->prepare("
      INSERT IGNORE INTO mobile_numbers_test
               ( Memberid,  comp_id,  numbers,  contact_number)
        VALUES (:Memberid, :comp_id, :numbers, :contact_number)
    ");
    
    while($sms = $select->fetch()) {
      foreach(explode("\r\n",$sms['sms_text']) as $no) $insert->execute(array(
        'Memberid'       => $sms['Memberid'],
        'comp_id'        => $sms['comp_id'],
        'numbers'        => $no,
        'contact_number' => $sms['sender_number']
      ));
    }
    
于 2012-05-13T08:14:10.850 に答える