UPDATE mit WHERE über 2 Tabellen

AS-N

Grünschnabel
Ich muss irgendwie folgendes hinbekommen:

Code:
UPDATE `datenbank`.`tabelle1` SET `categories_id`=267 IN (SELECT `tabelle2`.`products` WHERE `products_name` LIKE '%3/4%' OR `products_description` LIKE '%3/4%' AND `categories_id`=283);

Ich steh völlig auf dem Schlauch.
 
Welche Datenbank?
Und was musst du hinbekommen? Formuliere es doch bitte auf, damit wir verstehen können was du überhaubt willst.
 
Sorry, also, ich habe zwei Tabellen in einer mysql-db.
Ich muss in tabelle1 einen Wert ändern, wenn in tabelle2 die WHERE Bedingungen zutreffen.
In beiden Tabellen ist die products_id pro Artikel gleich.
 
Sowas in der Art sollte eigentlich gehen:
Code:
UPDATE 
	table1
SET 
	updatefield = newvalue
WHERE 
	products_id IN (
		SELECT products_id
		FROM table2
		WHERE field1=value1)

Nachtrag:
Noch ein Tipp bei deiner Where-Klausel. Wenn man OR und AND in einer Klausel verwendet sollte man mit Klammern arbeiten,damit das ganze auch richtig priorisiert wird.
Ich denke du willst es so haben:
Code:
(products_name LIKE '%3/4%' OR products_description LIKE '%3/4%') AND categories_id=283)
 
Zuletzt bearbeitet:
Hallo,

ich habe jetzt:
PHP:
UPDATE 
	`db`.`products_to_categories`
SET 
	`categories_id`=267
WHERE 
     `categories_id`=283 
AND 
     `products_id` IN (
		SELECT `products_id`
		FROM `products_description`
		WHERE `products_name` LIKE '%3/4%');

Aber es geht nicht, mysql meldet zwar keinen Fehler, aber es wird das komplette mysql ausgelastet und bringt aber kein Ergebnis.
 
Klingt nach vielen Daten und schlechten Indexies

Also musst du möglichst tief die Datenmenge reduzieren.
Das folgende SQL sieht auf den ersten Blick sehr komplex aus. Es reduziert aber schnelle die Datenmenge (naja, ich hoffe das MYSQL die queries sinnvoll umsetzt)

Code:
UPDATE
	products_to_categories
SET 	
	categories_id=267
WHERE 
	products_id IN (
		SELECT 
			product_id
		FROM
			(SELECT 
				products_id, 
				products_name
			FROM 
				products_description d,
				(SELECT 
					products_id 
				FROM 
					products_to_categories 
				WHERE 
					categories_id=283) c
			WHERE
				d.products_id O c.products_id)
		WHERE
			products_name LIKE '%3/4%')

Beschreibung:
Code:
//Block1:
				SELECT 
					products_id 
				FROM 
					products_to_categories 
				WHERE 
					categories_id=283
Zuerst wird mal die categorie-tabelle mit einer id gefiltert (ich hoffe du hast einen Index auf der ID, ist eigenltich bei ID-Feldern üblich)

Code:
//Block2:
			SELECT
				products_id, 
				products_name
			FROM 
				products_description d,
				([Block1]) c
			WHERE
				d.products_id O c.products_id
dann hänge ich die Produkte dazu. der LIKE-Filter habe ich extra nicht auf der untersten Stufe, da dies eher viel Performance braucht und nciht auf der ganzen Tabelle duchgeführt werden sollte. Kann aber auch sein, dass es umgekehrt doch besser ist. Sowas findet man nur durch pröbeln heraus.

Code:
//Block3:
		SELECT 
			product_id
		FROM
			([Block2])
		WHERE
			products_name LIKE '%3/4%')
Dann mache ich auf die Restmenge den LIKE-Filter.

Ich hoffe, dass dies weniger perfomance und Leistung frisst.

Zusätzlich sollten Indexe auf den folgenden Feldern liegen, denn dies beschleuningt auch markant:
products_description.product_id
products_to_categories.product_id
products_to_categories.categories_id
 
Zuletzt bearbeitet:
Dann ist das hier schon falsch. denn die Tabelle products kommt hier nirgens vor
Hallo,

ich habe jetzt:
PHP:
UPDATE 
	`db`.`products_to_categories`
SET 
	`categories_id`=267
WHERE 
     `categories_id`=283 
AND 
     `products_id` IN (
		SELECT `products_id`
		FROM `products_description`
		WHERE `products_name` LIKE '%3/4%');

Aber es geht nicht, mysql meldet zwar keinen Fehler, aber es wird das komplette mysql ausgelastet und bringt aber kein Ergebnis.
 

Neue Beiträge

Zurück