MySQL Felder aus anderen Zeilen ergänzen
Hallo,
ich habe eine MySQL db in der ich Werte ergänzen muss die es bei einigen Datensätzen gibt, bei anderen noch nicht.
Also
Jetzt gibt es z Bsp.:
oder gar
Filterwert der language_id1 ist maßgeblich.
Er soll jetzt die language_id 2-3 durchschauen und nach "n/a" suchen und schauen, ob er dafür in irgend einer anderen product_id schon einen Wert außer "n/a" hat und den dann dort eintagen wo "n/a" steht.
So dass halt alle "n/a" verschwinden.
Geht das überhaupt nur mit MySQL oder muss ich eventuell php zu Hilfe nehmen?
ich habe eine MySQL db in der ich Werte ergänzen muss die es bei einigen Datensätzen gibt, bei anderen noch nicht.
Also
product_id | language_id | filter_1 | filter_2 | filter_3 |
123 | 1 | carbon | versilbert | schwarz |
123 | 2 | carbon | silver plated | black |
123 | 3 | carbono | plateado | negro |
Jetzt gibt es z Bsp.:
456 | 1 | carbon | versilbert | schwarz |
456 | 2 | carbon | n/a | black |
456 | 3 | carbono | plateado | n/a |
oder gar
789 | 1 | carbon | versilbert | schwarz |
789 | 2 | n/at | n/a | n/a |
789 | 3 | n/a | n/a | n/a |
Filterwert der language_id1 ist maßgeblich.
Er soll jetzt die language_id 2-3 durchschauen und nach "n/a" suchen und schauen, ob er dafür in irgend einer anderen product_id schon einen Wert außer "n/a" hat und den dann dort eintagen wo "n/a" steht.
So dass halt alle "n/a" verschwinden.
Geht das überhaupt nur mit MySQL oder muss ich eventuell php zu Hilfe nehmen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 383730
Url: https://administrator.de/contentid/383730
Ausgedruckt am: 18.11.2024 um 03:11 Uhr
6 Kommentare
Neuester Kommentar
Das Problem in MySQL (und speziell in MySQL) ist das der Update-Vorgang sich teilweise weigert mit einem Join auf die eigene Tabelle zu arbeiten. Grundsätzlich ist das eigentlich einfach:
Teste das mal und poste ggf. die Fehlermeldung (wie gesagt MySQL spezifisch).
UPDATE tabelle
SET tabelle.filter_2 = t.filter_2
FROM tabelle
INNER JOIN tabelle t ON tabelle.filter_1 = t.filter_1
AND tabelle.language_id = t.language_id
AND t.filter_2 <> 'n/a'
WHERE tabelle.filter_2 = 'n/a'
Wenn du mit Aliasen arbeitest bzw. mit mehreren Tabellen, tu dir selber und MySQL den gefallen und gib allen einen Alias.
Aber was genau soll dein Query machen?
Er soll p.products_filter_1 mit dem Wert des Felds t.products_filter_1 aktualisieren.
Du joinst jedoch mit "ON p.products_filter_1 = t.products_filter_1".
Was soll sich da deiner Meinung nach verändern?
Oder sollte das "ON p.products_filter_1 <> t.products_filter_1" heißen?
Edit: Hab grad den Post von @ukulele-7 gelesen. Da steht noch "SET p.products_filter_2 = t.products_filter_2".
UPDATE products_description p
SET p.products_filter_1 = t.products_filter_1
FROM p INNER JOIN products_description t ON p.products_filter_1 = t.products_filter_1
AND p.language_id = t.language_id
AND t.products_filter_1 <> 'n/a'
WHERE products_description.products_filter_1 = 'n/a'
Aber was genau soll dein Query machen?
Er soll p.products_filter_1 mit dem Wert des Felds t.products_filter_1 aktualisieren.
Du joinst jedoch mit "ON p.products_filter_1 = t.products_filter_1".
Was soll sich da deiner Meinung nach verändern?
Oder sollte das "ON p.products_filter_1 <> t.products_filter_1" heißen?
Edit: Hab grad den Post von @ukulele-7 gelesen. Da steht noch "SET p.products_filter_2 = t.products_filter_2".
Ja sry ich konnte dazu nicht mehr schreiben, war ein paar Tage nicht verfügbar.
Das Prinzip funktioniert und ich meine auch in MySQL. Man muss nur leider den Code etwas umbauen damit MySQL das akzeptiert. Hier mal ein simples Beispiel:
https://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-targe ...
Ich glaube wenn du das in 2 Subquerys verschachtelst geht das auch, schau mal, ob du das so umgeschrieben bekommst ansonsten versuch ich mich noch mal
Das Prinzip funktioniert und ich meine auch in MySQL. Man muss nur leider den Code etwas umbauen damit MySQL das akzeptiert. Hier mal ein simples Beispiel:
https://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-targe ...
Ich glaube wenn du das in 2 Subquerys verschachtelst geht das auch, schau mal, ob du das so umgeschrieben bekommst ansonsten versuch ich mich noch mal