2016-08-23 3 views
0

Ich arbeite als Administrator in einem elektronischen Shop, wir verwenden OpenCart eCommerce und vor kurzem haben sie mich gebeten, Bulk-Produkten einen Sonderpreis hinzuzufügen und es für einige Tage laufen zu lassen. Natürlich kann ich es in der Admin-Seite einzeln ändern. Die Dinge sind, wie ich es durch phpMyAdmin ändern kann.
(Opencart Version 2.1.0.1)Opencart - phpMyAdmin Bulk update Sonderpreis

Ich habe 46 Produkte, die 25 € kosten und ich muss Sonderpreis zu 20 € hinzufügen.

Tabelle haben wir Preis zu aktualisieren ist

oc_product_special 

und Spalte wir aktualisieren müssen, ist

oc_product_special.price 

Natürlich brauchen wir Produkte, die aus der Tabelle 25 € kosten

oc_product 

Produkte aus dieser Tabelle abrufen und Sonderpreis zu 20 €

hinzufügen

Die Sache ist, wie man diese zwei Tabellen anschließt, also kann ich speziellen Preis addieren, die sql Abfrage laufen lassen, also kann ich dieses erreichen.

oc_product & oc_product_special , update this column oc_product_special.price 

Ich habe versucht,‘Diese SQL-Abfrage auszuführen, aber ich erhalten Fehler

UPDATE `oc_product_special`.price 
    SET `oc_product_special`.price = 16.1290 
    FROM `oc_product` 
    INNER JOIN `oc_product_special` 
      ON `oc_product`.product_id =`oc_product_special`.product_id 
    WHERE`oc_product`.price = 20.1612; 

**** Preis ohne Steuern beträgt 25 €/1,24 (Steuersatz) = 20,1612 €

Fehler # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden 'FROM oc_product INNER oc_product_special ON oc_product .product_id = JOIN' in Zeile 2

Jede Hilfe sehr geschätzt wird enter image description here

** EDIT

Aktualisierung meiner SQL-Abfrage

UPDATE oc_product_special AS ps 
INNER JOIN oc_product op ON ps.product_id = op.product_id 
set ps.price = 16.1290 
where op.price = 20.1612 

aber die Sache ist, dass 0 Zeilen betroffen sind. (Abfrage dauerte 0,0003 Sekunden), wenn ich Select-Abfrage mit diesen Preisen ausführen, habe ich Ergebnisse.

Zeige Zeilen 0 - 29 (46 insgesamt, Query hat 0.0010 sec)

***** Aktualisiert 2. Mal

Zuerst lief ich

DELETE FROM `oc_product_special` 
WHERE product_id IN 
(
    SELECT product_id 
    FROM oc_product p 
    WHERE p.price = 20.1612 
); 

, so kann ich "entfernen Sie alle vorhandenen Angebote aus diesen Produkten", lief diese Abfrage ohne Problem

Danach habe ich versucht, lief Insert Abfrage

INSERT INTO `oc_product_special` (`product_special_id`, `product_id`, `customer_group_id`, `priority`, `price`, `date_start`,`date_end`) 
VALUES 
(
    SELECT NULL, 78, 1, 0, 16.1290, 0000-00-00, 0000-00-00 
    FROM oc_product p 
    WHERE p.price = 20.1612 
); 

Ich habe meine Daten bezüglich der Daten meines Tisches angepasst. Aber ich erhalte diesen Fehler

# 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden 'NULL SELECT, 78, 1, 0, 16,1290, 0000-00-00, 0000-00-00 VON oc_product p' in Zeile 4

+0

Das Lesen könnte helfen: http://dev.mysql.com/doc/refman/5.7/en/update.html – billynoah

+0

@billynoah Beitrag bearbeitet, hat die richtige Syntax jetzt, aber ich erhalte keine Ergebnisse –

+0

Ich sehe, du hast eine Antwort akzeptiert - bedeutet das, dass dein Problem gelöst ist? – billynoah

Antwort

0

Ihre Anfrage keine Formatierung hat und entspricht nicht MySQL-Standards, haben Sie die Aufmerksamkeit auf folgendes achten:

  • nach einer UPDATE Anweisung sollte man die Tabelle angeben, zu verwenden und nicht die Spalte
  • die SET Anweisung kommt nur nach einem INNER JOIN
  • Verwenden Sie Suffix es für die Bequemlichkeit, wenn Tabellen

Correct MySQL-Abfrage unter (ändern Preise) Beitritt:

UPDATE oc_product_special AS ps 
INNER JOIN oc_product op ON ps.product_id = op.product_id 
set ps.price = 22 where op.price = 0.00 
+0

danke für die Antwort ich brauche etwas mehr Hilfe, um dies zu beheben. –

+0

Was brauchen Sie mehr Hilfe? @AgathonMarinopoulos – Sphinx

+0

Hallo Sphinx, wie Sie i bearbeitet meine Frage nach Ihrer Abfrage sehen können, aber leider habe ich nicht die erwarteten Ergebnisse haben. –

0

Sie benötigen eine Insert-Anweisung anstatt ein Update. Sie könnten auch erwägen alle vorhandenen Angebote aus diesen Produkten zu entfernen vorher und eine Abfrage ausführen, sie wie folgt zu klären:

DELETE FROM `oc_product_special` 
WHERE product_id IN 
(
    SELECT product_id 
    FROM oc_product p 
    WHERE p.price = 20.1612 
); 

Dann können Sie den gewünschten Produkt-IDs zusammen mit anderen Bereichen wählen und sie wie folgt ein:

INSERT INTO `oc_product_special` (`product_special_id`, `product_id`, `customer_group_id`, `priority`, `price`, `date_start`, `date_end`) 
VALUES 
(
    SELECT NULL, product_id, 1, 0, 16.1290, CURDATE(), CURDATE() + INTERVAL 1 DAY 
    FROM oc_product p 
    WHERE p.price = 20.1612 
); 

In diesem Beispiel startet das Special heute und läuft 5 Tage. Natürlich sollten Sie die customer_group_id, priority, start_date , and end_date` in meiner Abfrage anpassen.

+0

Vielen Dank für die Antwort, die ich meine Frage aktualisiert, weil ich immer noch Fehler in meiner Anfrage erhalten versuchen, Sonderpreis in bestimmten Produkten hinzuzufügen. –

+0

die Abfrage, die Sie lief nicht das gleiche ist wie das, was ich zur Verfügung gestellt. – billynoah