0

我有 3 张桌子:

  1. SMS_IN使用“原始”号码(数据是通过短信发送的,因此所有号码都是短信形式:我正在“分解”它们以将它们变成一个号码):

    短信文本
    发件人号码
    sent_dt
  2. members与会员的手机号码:

    会员ID
    用户名
    comp_id
    电话
  3. mobile_numbers_test他们所有的数字表:

    会员ID
    comp_id
    数字
    联系电话
    积极的

我正在尝试通过 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. 如果不存在,则在on中创建一个UNIQUE索引:mobile_numbers_test(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_testusing 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 回答