2016-05-06 22 views
0

Ich habe eine dynamische Tabelle in meiner Datenbank, dass Spalten geändert und aus anderen Skripten gelöscht werden. Da es eine Chance gibt, dass all diese zusätzlichen Spalten möglicherweise Null oder leere Werte enthalten, möchte ich irgendwo eine "Bereinigungs" -Aktion haben, die nach diesen Zellen sucht, und wenn alle leer sind, die ganze Reihe fallenzulassen.Drop-Zeile, wenn einige Spalten leer sind

enter image description here

Die, die in rot sind die, die ich überprüfen möchten. Wenn beide Spalten null oder leer sind WHERE customers_id = 1, dann lösche Zeile.

Wie ich schon sagte, dies ist nur ein Beispiel ... Es könnte 5 oder 10 Spalten nach customers_id geben. Ich muss sie alle überprüfen, wenn sie leer sind. Ich kann alle Namen dieser zusätzlichen Spalten in einer Zeichenfolge wie folgt erhalten:

$temparray = array(); 
$q = mydb_query("SHOW COLUMNS FROM $table WHERE field NOT REGEXP 'id|customers_id'"); 
while($row = mydb_fetch_array($q)){ 
    $temparray[] = $row['Field']; 
} 
$forSQL = " '".implode("', '", $temparray)."' "; // gives 'client_custom_contact_person', 'client_custom_password' 
$forPHP = implode(", ", $temparray); //gives client_custom_contact_person, client_custom_password 

Was ist der schnellste Weg zu überprüfen, ob alle diese Spaltenwerte sind leer, diese Zeile zu fallen?

Sollte ich mit einer php foreach Funktion gehen? Oder gibt es eine schnellere mysql-Abfrage, die ich tun könnte?

-Danke

Antwort

0

Ich habe es herausgefunden. Verwenden der $ forPHP-Zeichenfolge:

$q2 = mydb_query("SELECT $forPHP FROM $table WHERE customers_id = 1"); 
      $res = mydb_fetch_assoc($q2); 
      if(!array_filter($res)) { 
       //If all are empty then 
       mydb_query("DELETE FROM $table WHERE customers_id = 1"); 
      } 
Verwandte Themen