php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.01.2005, 17:43  
Gast
 
Beiträge: n/a
Standard mysql update query mit mehreren Tabellen funktioniert nicht

folgendes ist mein query:
Code:
		$query = "
			UPDATE
				com_forum_list,
				com_subboard_list,
				com_board_list,
				page_user_data
			SET
				forum_post_number = forum_post_number + 1,
				forum_thread_number = forum_thread_number + 1,
				forum_last_poster = ".$session->user_id.",
				forum_last_post_at = NOW(),
				forum_last_post = LAST_INSERT_ID(),
				forum_last_thread = ".$new_thread_id.",
				subboard_post_number = subboard_post_number + 1,
				subboard_thread_number = subboard_thread_number + 1,
				subboard_last_poster = ".$session->user_id.",
				subboard_last_post = LAST_INSERT_ID(),
				subboard_last_post_at = NOW(),
				subboard_last_thread = ".$new_thread_id.",
				board_post_number = board_post_number + 1,
				board_thread_number = board_thread_number + 1,
				board_last_poster = ".$session->user_id.",
				board_last_post = LAST_INSERT_ID(),
				board_last_post_at = NOW(),
				board_last_thread = ".$new_thread_id.",
				user_post_number = user_post_number + 1,
				user_thread_number = user_thread_number + 1
			WHERE
				forum_id = ".$_GET['forum_id']." AND
				forum_parent = subboard_id AND
				subboard_parent = board_id AND
				user_id = ".$session->user_id."
		";

		if (!$result = mysql_query($query))
		{
			die("mysql error: ".mysql_error());
		}
---

die(..) gibt dann folgenden Fehler zurueck:
Zitat:
mysql error: You have an error in your SQL syntax near ' com_subboard_list, com_board_list, page_user_data SET forum_' at line 3
---

die betroffenen Tabellen exisitieren und das Query funktioniert auch wenn ich nur eine dieser Tabellen nach update angebe und modifiziere. Der Tabellentyp ist MylSAM.

weiss jemand was da schief laeuft/was ich falsch mache?
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.01.2005, 18:15  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Du musst den entsprechenden Tabellennamen oder den verwendeten Alias vor die Feldnamen setzen. Ansonsten können die Felder den verschiedenen Tabellen nicht zugeordnet werden. Also bsp. statt
Code:
            forum_last_post = LAST_INSERT_ID(), 
            forum_last_thread = ".$new_thread_id.", 
            subboard_post_number = subboard_post_number + 1, 
            subboard_thread_number = subboard_thread_number + 1,
ist
Code:
            com_forum_list.forum_last_post = LAST_INSERT_ID(), 
            com_forum_list.forum_last_thread = ".$new_thread_id.", 
            com_subboard_list.subboard_post_number = com_subboard_list.subboard_post_number + 1, 
            com_subboard_list.subboard_thread_number = com_subboard_list.subboard_thread_number + 1,
erforderlich.

Das es mit separaten Statements für jede Tabelle funktioniert ist einfach zu erklären, da es nur eine Tabelle gibt, auf die sich das Statement beziehen kann und die Tabelle in der die sich betroffenen Felder befinden damit eindeutig ist.

In der MySQL-Dokumentation gibt es ein Beispiel für die Multiple-Table Syntax eines UPDATE-Statements, siehe http://dev.mysql.com/doc/mysql/en/UPDATE.html:

Zitat:
Starting with MySQL 4.0.4, you can also perform UPDATE operations that cover multiple tables:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
carrib ist offline   Mit Zitat antworten
Alt 06.01.2005, 19:01  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von carrib
Du musst den entsprechenden Tabellennamen oder den verwendeten Alias vor die Feldnamen setzen. Ansonsten können die Felder den verschiedenen Tabellen nicht zugeordnet werden. Also bsp. statt
Code:
            forum_last_post = LAST_INSERT_ID(), 
            forum_last_thread = ".$new_thread_id.", 
            subboard_post_number = subboard_post_number + 1, 
            subboard_thread_number = subboard_thread_number + 1,
ist
Code:
            com_forum_list.forum_last_post = LAST_INSERT_ID(), 
            com_forum_list.forum_last_thread = ".$new_thread_id.", 
            com_subboard_list.subboard_post_number = com_subboard_list.subboard_post_number + 1, 
            com_subboard_list.subboard_thread_number = com_subboard_list.subboard_thread_number + 1,
erforderlich.

Das es mit separaten Statements für jede Tabelle funktioniert ist einfach zu erklären, da es nur eine Tabelle gibt, auf die sich das Statement beziehen kann und die Tabelle in der die sich betroffenen Felder befinden damit eindeutig ist.
Das ist nur richtig wenn die Tabellenfelder in den vers. Feldern die gleichen Namen haben, ansonsten kann MySQL die Felder eindeutig zuordnen. Ausserdem wuerde der Parser dann nicht gleich bei der dritten Zeile meckern sondern bei der 6, 7 oder achten.

Zitat:
Zitat von carrib
In der MySQL-Dokumentation gibt es ein Beispiel für die Multiple-Table Syntax eines UPDATE-Statements, siehe http://dev.mysql.com/doc/mysql/en/UPDATE.html:

Zitat:
Starting with MySQL 4.0.4, you can also perform UPDATE operations that cover multiple tables:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
Danke, da war mein Fehler ^^ hab nicht bedacht das der Server auf den ich den Quelltext aufspiele noch eine aeltere Version ist ^^
  Mit Zitat antworten
Alt 07.01.2005, 08:56  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Die Zuordnung der Felder wird sich wie bei einem SELECT verhalten, bin aber davon ausgegangen das Felder in verschiedenen Tabellen identisch benannt wurden. Ich gebe zu, dass ich mir die Fehlermeldung nicht sooooo ganz genau angeschaut habe
carrib ist offline   Mit Zitat antworten
Alt 07.01.2005, 17:21  
Gast
 
Beiträge: n/a
Standard

nicht schlimm ^^ Problem ja trotzdem geloest ^^
  Mit Zitat antworten
Alt 08.01.2005, 16:29  
Gast
 
Beiträge: n/a
Standard

Also Problem habe ich jetzt geloest indem ich mehrere Abfragen an MySQL durchgefuehrt habe. Das unpraktische daran ist, das ich, da ich Daten aus den Tabellen brauche, aber Update nur die eine Tabelle lesen und schreiben kann, ich noch eine Menge SELECTs ausfuehren musste, um das hinzubekommen. Gibt es da eine bessere Moeglichkeit? Wie gesagt, kein Update auf mehrere Tabellen bei dem Server (v3.2..) nicht moeglich

Quelltext:

Code:
/*update forum*/

		$query = "
			UPDATE
				com_forum_list
			SET
				com_forum_list.forum_post_number = com_forum_list.forum_post_number + 1,
				com_forum_list.forum_thread_number = com_forum_list.forum_thread_number + 1,
				com_forum_list.forum_last_poster = ".$session->user_id.",
				com_forum_list.forum_last_post_at = NOW(),
				com_forum_list.forum_last_post = LAST_INSERT_ID(),
				com_forum_list.forum_last_thread = ".$new_thread_id."
			WHERE
				com_forum_list.forum_id = ".$_GET['forum_id']."
		";


		if (!$result = mysql_query($query))
		{
			mdie("mysql error(3): ".mysql_error());
		}

/*update subboard*/

		$query = "
			SELECT
				forum_parent
			FROM
				com_forum_list
			WHERE
				forum_id = ".$_GET['forum_id']."
		";

		if (!$result = mysql_query($query))
		{
			mdie("mysql error(4): ".mysql_error());
		}

		$temp = mysql_fetch_assoc($result);
		$forum_parent = $temp['forum_parent'];

		$query = "
			UPDATE
				com_subboard_list
			SET
				com_subboard_list.subboard_post_number = com_subboard_list.subboard_post_number + 1,
				com_subboard_list.subboard_thread_number = com_subboard_list.subboard_thread_number + 1,
				com_subboard_list.subboard_last_poster = ".$session->user_id.",
				com_subboard_list.subboard_last_post = LAST_INSERT_ID(),
				com_subboard_list.subboard_last_post_at = NOW(),
				com_subboard_list.subboard_last_thread = ".$new_thread_id."
			WHERE
				 com_subboard_list.subboard_id = ".$forum_parent."
		";

		if (!$result = mysql_query($query))
		{
			mdie("mysql error(5): ".mysql_error());
		}

/*update board*/

		$query = "
			SELECT
				subboard_parent
			FROM
				com_subboard_list
			WHERE
				subboard_id = ".$forum_parent."
		";

		if (!$result = mysql_query($query))
		{
			mdie("mysql error(6): ".mysql_error());
		}

		$temp = mysql_fetch_assoc($result);
		$subboard_parent = $temp['subboard_parent'];

		$query = "
			UPDATE
				com_board_list
			SET
				com_board_list.board_post_number = com_board_list.board_post_number + 1,
				com_board_list.board_thread_number = com_board_list.board_thread_number + 1,
				com_board_list.board_last_poster = ".$session->user_id.",
				com_board_list.board_last_post = LAST_INSERT_ID(),
				com_board_list.board_last_post_at = NOW(),
				com_board_list.board_last_thread = ".$new_thread_id."
			WHERE
				com_board_list.board_id = ".$subboard_parent."
		";

		if (!$result = mysql_query($query))
		{
			mdie("mysql error(7): ".mysql_error());
		}

/*update user data*/

		$query = "
			UPDATE
				page_user_data
			SET
				page_user_data.user_post_number = page_user_data.user_post_number + 1,
				page_user_data.user_thread_number = page_user_data.user_thread_number + 1
			WHERE
				page_user_data.user_id = ".$session->user_id."
		";

		if (!$result = mysql_query($query))
		{
			mdie("mysql error(8): ".mysql_error());
		}
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP Array in MYSQL Tabellen schreiben Matt Datenbanken 1 26.02.2008 19:43
Update über zwei Tabellen tekknotrip Datenbanken 2 26.02.2007 16:25
Zeilen aus mehreren Tabellen löschn mit Bezug auf eine Table Riks Datenbanken 3 25.02.2007 20:17
Lost connection to MySQL server during query in ... ? Alpha Centauri Datenbanken 0 24.10.2005 11:09
verschiedene Query Ergebnisse in MySQL 4.0.x und 4.1.x Datenbanken 3 18.09.2005 15:57
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
einfache mysql abfrage und mysql update haut nicht ganz hin djrace PHP Tipps 2005-2 6 12.08.2005 15:28
Update in mysql funzt nicht maeck PHP Tipps 2005-2 4 27.06.2005 22:52
Datumssortierung funktioniert bei MySQL nicht richtig PHP Tipps 2005 2 01.04.2005 14:00
Abfrage funktioniert unter MySQL aber nicht unter MS SQL Schiedsrichter Datenbanken 2 27.01.2005 15:43
MySQL UPDATE Befehl funktioniert nicht PHP Tipps 2005 6 24.01.2005 15:03
php / Mysql Update auf neuste Version PHP Tipps 2007 5 05.01.2005 19:34
Problem: MySQL Query funktioniert nicht. Wieso? PHP Tipps 2004-2 3 24.12.2004 13:58
[Erledigt] Selectanfrage an eine Datenbank,aber aus mehreren Tabellen Datenbanken 2 26.10.2004 07:23
[Erledigt] keine tabellen in mysql Datenbanken 0 31.08.2004 11:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql update query, mysql update mehrere tabellen, mysql query update, mysql update, update query, mysql update 2 tabellen, update mehrere tabellen, mysql update über mehrere tabellen, mysql php update query, php mysql update query, mysql mehrere updates in einer abfrage, query update, $query = \update, php mysql query update, http://www.php.de/php-fortgeschrittene/15495-mysql-update-query-mit-mehreren-tabellen-funktioniert-nicht.html, mysql update zwei tabellen, update über mehrere tabellen, update query mysql, mysql mehrere updates, php mysql update mehrere tabellen

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.