2017-03-24 7 views
0

ich auf doppelte Update einfügen müssen folgende Tabelle „Texte“MySQL mehrere Bedingungen

+---------+-------------+-------------+-----------+--------------------+ 
| txt_id | txt_lang_id | txt_section | txt_code | txt_value   | 
+---------+-------------+-------------+-----------+--------------------+ 
| 1 |  1  | home  | txt_title | Home    | 
| 2 |  1  | home  | txt_btn | I'm a button  | 
| 3 |  1  | home  | txt_welc | Welcome to home | 
etc... 

ich mehrere Datenbanken, eine für jedes Unternehmen, und eine Master-Datenbank, in der die Texte erstellt werden, in jedem Unternehmen dabei Der Administrator kann Ihre Texte anpassen.

Meine Idee ist es, eine Abfrage zu erstellen, die die neuen Texte in jeder Datenbank erstellt, und wenn es bereits existiert, um den Wert zu aktualisieren.

Es ist möglich, die Abfrage INSERT INTO ... ON DUPLICATE KEY UPDATE Haben mehrere Bedingungen zu machen wie txt_lang_id = 1 AND txt_section = 'home' AND txt_code = 'txt_title' SET txt_value = 'New home'

Meine Idee ist es, so zu sein, weil die gleiche Funktion für andere Tabellen, wie Konfiguration verwenden würde, die eine Tabelle ist, die beginnt, leer und wird ausgefüllt, wenn der Administrator der Firma die Standardoptionen ändert. Daher ist die Auto-ID nicht immer in der gleichen Reihenfolge für alle Unternehmen.

Es ist möglich, so etwas zu tun, oder besser, ich suche nach der Art, wie die Zeilen immer in der gleichen Reihenfolge sind. Vielen Dank.

+0

Ihre Frage ist nicht sehr klar – nick

+0

Welche Felder definieren Ihre primären und wenn eindeutige Schlüssel? Aus der Frage, scheint wie txt_lang_id, txt_section, txt_code und txt_value die Eindeutigkeit des Datensatzes zu machen ist das richtig? – JuveLeo1906

Antwort

0

können Sie UPDATE mit CASE verwenden, z.B .:

INSERT INTO ... ON DUPLICATE KEY UPDATE txt_value = 
(CASE WHEN txt_lang_id = 1 AND txt_section = 'home' 
AND txt_code = 'txt_title' THEN 'New home' else txt_value end); 

Hier ist die SQL Fiddle.