2016-05-10 3 views
0

ich geschaffen habe zwei Tabellen subscription_pending und subscription_completewie durch folgenden Befehl Datenbankwert von update Tabelle php

subscription_complete enthalten

id mag1 mag2 mag3 mag4 
4 100 0 100 0 

subscription_pending enthalten

id mag1 mag2 mag3 mag4 
4  100  

Ich habe Einfügewert ersetzen

$final_q= "INSERT INTO `subscription_complete` (`id`, `mag1`, `mag2`, `mag3`, `mag4`) VALUES ('".$row_q['id']."','".$row_q['mag1']."','".$row_q['mag2']."','".$row_q['mag3']."','".$row_q['mag4']."' 

Ich mag die subscription_complete Tabelle aktualisieren, ohne seinen Wert d 100 für das Ersetzen von i stehen ganze Schreib folgende Abfrage

$final_q1= "update subscription_complete set mag1='".$row_q['mag1']."',mag2='".$row_q['mag2']."',mag3='".$row_q['mag3']."',mag4='".$row_q['mag4']."' where id='".$row_q['id']."'"; 

Sie mir sagen können, wie in der verbleibenden Spalte 100 Wert zu setzen, wenn der Wert 0 ist?

Vielen Dank im Voraus!

+0

** WARNUNG **: Die Verwendung von manuellem Escaping ist extrem fehleranfällig und ein einzelner Fehler kann zu einem lähmenden [SQL injection bug] führen (http://bobby-tables.com/). Wann immer möglich, verwenden Sie ** vorbereitete Aussagen **. Diese sind ziemlich einfach in [mysqli'] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [PDO] (http://php.net/manual/ en/pdo.prepared-statements.php) wo alle vom Benutzer angegebenen Daten mit einem '?' oder ': name'-Indikator angegeben werden, der später mit' bind_param' oder 'execute' gefüllt wird, je nachdem, welchen du verwendest. – tadman

+0

Warum nicht bei 1 Tabelle bleiben und -1 oder -100 verwenden, da der Benutzer kein Abonnement hat, 0 wenn ausstehend und 100 wenn abgeschlossen? Auch können Sie mehr vom PHP-Skript zeigen. Sicherlich alles, was Sie tun müssen, ist Update Mag2 nicht alle ausstehenden in vollständig eingeben? – Matt

+0

ich bin nicht in der Lage zu unterscheiden zwischen, wie ich den Wert aktualisieren, so habe ich Update für die gesamte Tabelle verwendet –

Antwort

0

Dies setzt die leeren Felder in subscription_pending enthalten NULL, nicht leere Zeichenfolgen.

UPDATE subscription_complete AS c 
JOIN subscription_pending AS p ON p.id = c.id 
SET c.mag1 = IFNULL(p.mag1, c.mag1), 
    c.mag2 = IFNULL(p.mag2, c.mag2), 
    c.mag3 = IFNULL(p.mag3, c.mag3), 
    c.mag4 = IFNULL(p.mag4, c.mag4) 

Wenn sie tatsächlich leere Strings sind, verwenden Sie IF(p.magX = '', c.magX, p.magX) anstelle des IFNULL Test.

+0

ich habe beide weg versucht aber noch nicht funktioniert bedeutet keine update stattfinden –