MySQL - Update Set Column=Postdaten wenn nicht NULL?

Joe

Erfahrenes Mitglied
Hallo Tutorials,

Ist es möglich Bei einem Update zu prüfen ob die variable leer oder gestzt ist?
Bsp:
PHP:
if (mysql_num_rows($Ereignisse) != 0) {
			$rowEreignisse = mysql_fetch_assoc($Ereignisse);
			$Skill1=$rowEreignisse["Skill1"];
			$Skill2=$rowEreignisse["Skill2"];
			$Skill3=$rowEreignisse["Skill3"];
			$Zahl=$rowEreignisse["Zahl"];
		}
		mysql_query("UPDATE
						Table
					SET
						$Skill1=$Skill1+$Zahl,
						$Skill2=$Skill2+$Zahl,
						$Skill3=$Skill3+$Zahl
					Where
						Username= '$Username'");
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
			die;
		}
Das Update dürfte fehlschlagen if (!$Skill3).
Kann man das mit IFNULL() irgendwie abfangen, wenn ja wie?

Grüsse Joe.
 
Zuletzt bearbeitet:
Oder eleganter gleich im MySQL, also im SELECT das dir dein $Ereignisse ausgibt (und du hier nicht gepostet hast)
SQL:
SELECT
    IFNULL(Skill1, 0) AS skill1,
    IFNULL(Skill2, 0) AS skill2,
    .....

Aber du Liest die Werte Aus und machst gleich nachher ein Update draus? Zu Umständlich. Mach alles direkt im SQL
SQL:
UPDATE
    mytable AS t,
    ereignisse AS e
SET
    t.skill1 = IFNULL(e.skill1, 0) + IFNULL(e.zahl, 0)
    ....
WHERE
     t.username= '{$Username}'
     AND u.username= '{$Username}'


Achja, ich geh davon aus, du willst das Feld Skill1 updaten und nicht die PHP-Variable $Skill1 wie in deinem Beispiel...
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Joe
@Yaslaw
Danke das ist was ich suche :)

Werde mir das morgen genauer ansehen.
Die Variable $Skill1 beinhaltet das Feld welches ge-updatet werden soll. Die Tabelle hat mehr Felder als nötig sind zu updaten.
Welche Felder upzudaten sind hole ich aus einer Tabelle "Ereigniss" welche variable Daten liefert. Exakt diese Daten entsprechen den Feldern aus Tabelle2 welche zu updaten sind. Tabelle2 beinhaltet ca 12 Felder aber upzudaten sind NUR 2 ODER 3 Felder.
Ich poste dazu morgen mein Erfolg oder den fehlenden Teil.

Dein BspCode zeigt aber schon genau das was ich suche:
t.skill1 = IFNULL(e.skill1, 0) + IFNULL(e.zahl, 0)
Das zeigt mir wie es geht :)

Vielen Dank, wie immer kompetent und problemerkennend!

@timestamp
Dies Funktionen zum Überprüfen sind mir bekannt. Aber ich suchte nach einer Löung zur Prüfung in einem MySQL-Query. Mein ThreadTitel war verwirrend Danke und Sorry.
Wenn ich zb Isset prüfe würde dies erforden 2 Queries zu machen.
 
Habe das wie von Yaslaw aufgezeigt versucht umzusetzen.
Allerdings bin ich nicht sicher ob der Query bei affected_rows() so richtig konstruiert ist.
Desweiteren frage ich mich ob man während des Updates oder Insert den Datensatz anhand der ID aus der Tabelle Ereignisse löschen kann.

PHP:
if (($_POST['IDEreignisse']!='') OR ($_POST['DeleteEreignissItembau']!='') ) {
	$DeleteEreignissItembau = trim($_POST['DeleteEreignissItembau']);
	$DeleteEreignissItembau = mysql_real_escape_string($DeleteEreignissItembau);
	if ($DeleteEreignissItembau=='Y') {
		
		// Dieser Teil erspart sich dank Yaslaws Kenntnissen
		/*$getEreignisse = "SELECT
							ID,
							RessourceName,
							Textfeld,
							Beuteart,
							Beutemenge
						FROM
							Ereignisse
						WHERE
							Username='$Username' AND Aktion='Lesen'";
		$Ereignisse = mysql_query($getEreignisse);
		if (!$Ereignisse) {
			die ('Etwas stimmte mit dem Query nicht: '.$db->error);
		}
		if (mysql_num_rows($Ereignisse) != 0) {
			$rowEreignisse = mysql_fetch_assoc($Ereignisse);
			$IDEreignisse=$rowEreignisse["ID"];
			$Skill1=$rowEreignisse["RessourceName"];
			$Skill2=$rowEreignisse["Textfeld"];
			$Skill3=$rowEreignisse["Beuteart"];
			$Zahl=$rowEreignisse["Beutemenge"];
		}*/
		mysql_query("UPDATE
						CharFaehigkeiten AS t,
						Ereignisse AS e
					SET
						t.ExpPoints=t.ExpPoints+3,
						t.RessourceName=e.RessourceName+e.Beutemenge,
						t.Textfeld=e.Textfeld+e.Beutemenge,
						t.Beuteart = IFNULL(e.Beuteart, 0) + IF(e.Beuteart, e.Beutemenge, 0)
					WHERE
						t.username= '{$Username}'
						AND e.username= '{$Username}'";
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
			die;
		}
		// Datensatz für User zum ersten mal erstellen
		if (mysql_affected_rows() == 0) {
			mysql_query("INSERT INTO
							CharFaehigkeiten
						SET 
							Username='{$Username}',
							ExpPoints=3,
							col2=col5,
							col3=col5,
							col4=IF(col4, col5, 0)
						SELECT
							RessourceName AS col3,
							Textfeld AS col4,
							Beuteart AS col5
						FROM
							Ereignisse,
							Ereignisse,
							Ereignisse,
						WHERE
							Ereignisse.Username='{$Username}'");
			if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
				die;
			}
		}
		// Ereigniss aus Datenbank löschen
		$loeschen = "DELETE FROM 
						Ereignisse 
					WHERE 
						ID = '$IDEreignisse'";
		$loesch = mysql_query($loeschen);
		$IDEreignisse='';
		$DeleteEreignissItembau='';

		header("Location: main.php?section=bunker");
		die;
	}
}
 
Zuletzt bearbeitet:
Also ich kapituliere bekomme es nicht hin. Es gelingt mir nicht ein Update durchzuführen wenn der Feldname (in der Varibable) NULL ist.

Hier mal das ganze Script welches zwar funktioniert aber eben sehr viele Queries beinhaltet:
PHP:
	<div id="content-pic">
	<?php include 'templates/Ress.tpl'; ?>
	</div>
	<div id="upper-pic">
	<h2>Pics:</h2>
	</div>
	<div id="uppercontent">
	<h2>Text:</h2>
	</div>
<?php
//error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
if (($_POST['IDEreignisse']!='') OR ($_POST['DeleteEreignissItembau']!='') ) {
	$DeleteEreignissItembau = trim($_POST['DeleteEreignissItembau']);
	$DeleteEreignissItembau = mysql_real_escape_string($DeleteEreignissItembau);
	if ($DeleteEreignissItembau=='Y') {
		
		// Dieser Teil erspart sich dank Yaslaws Kenntnissen
		$getEreignisse = "SELECT
							ID,
							RessourceName,
							Textfeld,
							Beuteart,
							Beutemenge
						FROM
							Ereignisse
						WHERE
							Username='$Username' AND Aktion='Lesen'";
		$Ereignisse = mysql_query($getEreignisse);
		if (!$Ereignisse) {
			die ('Etwas stimmte mit dem Query nicht: '.$db->error);
		}
		if (mysql_num_rows($Ereignisse) != 0) {
			$rowEreignisse = mysql_fetch_assoc($Ereignisse);
			$IDEreignisse=$rowEreignisse["ID"];
			$Skill1=$rowEreignisse["RessourceName"];
			$Skill2=$rowEreignisse["Textfeld"];
			$Skill3=$rowEreignisse["Beuteart"];
			$Zahl=$rowEreignisse["Beutemenge"];
		}
		if (!$Skill3) {
			mysql_query("UPDATE
							CharFaehigkeiten
						SET
							$Skill1=$Skill1+$Zahl,
							$Skill2=$Skill2+$Zahl
						Where
							Username= '$Username'");
			if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
			}
			// Datensatz für User zum ersten mal erstellen
			if (mysql_affected_rows() == 0) {
				mysql_query("INSERT INTO
							CharFaehigkeiten
									(Username,
									ExpPoints,
									$Skill1,
									$Skill2)
								VALUES
									('$Username',4,$Zahl,$Zahl)");
				if (mysql_errno()) {		
					echo mysql_errno() . ": " . mysql_error(). "\n";
					die;
				}
			}
		}
		else {
			mysql_query("UPDATE
							CharFaehigkeiten
						SET
							$Skill1=$Skill1+$Zahl,
							$Skill2=$Skill2+$Zahl,
							$Skill3=$Skill3+$Zahl
						Where
							Username= '$Username'");
			if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
			}
			// Datensatz für User zum ersten mal erstellen
			if (mysql_affected_rows() == 0) {
				mysql_query("INSERT INTO
							CharFaehigkeiten
									(Username,
									ExpPoints,
									$Skill1,
									$Skill2,
									$Skill3)
								VALUES
									('$Username',4,$Zahl,$Zahl,$Zahl)");
				if (mysql_errno()) {		
					echo mysql_errno() . ": " . mysql_error(). "\n";
					die;
				}
			}
		}
		// Ereigniss aus Datenbank löschen
		$loeschen = "DELETE FROM 
						Ereignisse 
					WHERE 
						ID = '$IDEreignisse'";
		$loesch = mysql_query($loeschen);
		$IDEreignisse='';
		$DeleteEreignissItembau='';

		header("Location: main.php?section=bunker");*/
		die;
	}
}
?>
<div id=content>
<h1>Ereigniss</h1>
<h2>Lektüre studiert<br></h2>
<?php

//error_reporting(E_ALL);
$getEreignisse = "SELECT
					ID,
					Aktion,
					Tabelle,
					RessourceName,
					Textfeld,
					Beuteart,
					Beutemenge
				FROM
					Ereignisse
				WHERE
					Username='$Username' AND Aktion='Lesen'";
$Ereignisse = mysql_query($getEreignisse);
if (!$Ereignisse) {
	die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}
if (mysql_num_rows($Ereignisse) != 0) {
	$rowEreignisse = mysql_fetch_assoc($Ereignisse);
	$Itembaubericht=$rowEreignisse["Tabelle"];
	$IDEreignisse=$rowEreignisse["ID"];
	$Skill1=$rowEreignisse["RessourceName"];
	$Skill2=$rowEreignisse["Textfeld"];
	$Skill3=$rowEreignisse["Beuteart"];
	$Zahl=$rowEreignisse["Beutemenge"];
}
else {
	header("Location: main.php?section=bunker");
}
echo "<p>Du hast deine Lektüre studiert</p>
	<p>Lektüre: $Itembaubericht</p>
	<h2>$Zahl Punkte auf $Skill1 und $Skill2, $Skill3 Erfahrungpunkte: 3Exp</h2>";
echo "<form action=\"main.php?section=ereigniss_lesen\" method=\"post\">
					<input type='hidden' name='DeleteEreignissItembau' value='Y'>
					<input type='hidden' name='IDEreignisse' value='$IDEreignisse'>
					<input type='submit' style='font-family: Verdana; font-size: 8pt' name='formaction' value='OK!'></form>";
?>
</div>

Dennoch Danke :)
 

Neue Beiträge

Zurück