2012-05-13 3 views
0

J'ai 3 tables:UPDATE/INSERT sur trois tables MySQL en utilisant PHP

  1. SMS_IN avec des chiffres 'bruts' (les données sont envoyées par SMS, de sorte que tous les numéros sont sous forme de SMS: Je suis ' exploser » eux pour les en un seul numéro):

     
    sms_text 
    sender_number 
    sent_dt
  2. members avec les membres de numéros mobiles:

     
    Memberid 
    Username 
    comp_id 
    phone
  3. mobile_numbers_test table de tous leurs numéros:

     
    Memberid 
    comp_id 
    numbers 
    contact_number 
    active

Je tente d'obtenir SMS_IN (nouveaux numéros) dans mobile_numbers_test (avec les anciens numéros), avec 2 contrôles:

  1. SMS_IN.sender_number = members.phone; et
  2. Si SMS_IN.sender_number = mobile_numbers_test.contact_number AND SMS_IN.sms_text (sous forme d'éclat) = mobile_numbers_test.numbers, ignorer (ou écraser) - sinon INSERT.

C'est ce que j'ai jusqu'à présent:

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>'; 

Dans cet exemple, je echo la réponse pour que je sache ce qui sort ... comment puis-je UPDATE ou INSERT?

Répondre

1
  1. Créer un index UNIQUE dans mobile_numbers_test sur (contact_number, numbers) si l'on n'existe déjà:

    ALTER TABLE mobile_numbers_test ADD UNIQUE INDEX (contact_number, numbers); 
    
  2. Rejoignez members avec SMS_IN sur votre rejoindre critère:

    SELECT * FROM members JOIN SMS_IN ON SMS_IN.sender_number = members.phone 
    
  3. Boucle sur le resultset, l'explosion des nombres et l'insertion dans mobile_numbers_test en utilisant INSERT IGNORE. Mettre tous ensemble (en utilisant AOP, parce que ça va vous rendre la vie plus facile et vous devriez vraiment arrêter d'écrire un nouveau code avec les anciennes fonctions mysql_*: ils ne sont plus maintenus et la communauté a commencé le deprecation process):

    $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'] 
    )); 
    } 
    
+0

Thx homme .. u fait ma journée ... et oui je suis nouveau à mysql et php ... encore en train d'apprendre ... donc pouvez-vous aider à utiliser PDO ... où puis-je apprendre toute suggestion pour de bon site ou livre ... thx ..aide aide – Harinder

+0

salut bro peut nous faire 2 plus vérifier cela avant d'entrer des données pour mobile_numbers_test. 1er. je veux vérifier si $ non si 10 chiffres numériques ou non (98765401324), et 2ème. s'il y en a (il y a un alphabet ou un symbole), il devrait ignorer cette valeur et entrer la valeur suivante .... est-ce possible? – Harinder