Question

J'ai essayé plusieurs méthodes pour mettre à jour une colonne d'une table de base de données mySQL à partir d'une autre table, mais je n'ai aucune chance.

J'ai lu quelque part que la version 3.5.2 ne prend pas en charge les mises à jour multi-tables et que j'ai besoin d'une solution basée sur un code - est-ce correct?

Si non, quelqu'un peut-il m'indiquer la bonne direction en utilisant SQL?

UPDATE products SET products_ordered = (
    SELECT SUM(products_quantity) 
    FROM orders_products 
    WHERE products_id = products.products_id
);

ou:

Create temporary table my_temp_table
as
SELECT products_id, SUM(products_quantity) as total 
FROM orders_products 
GROUP BY products_id 

UPDATE products, my_temp_table
SET products.products_ordered = my_temp_table.total 
WHERE products.products_id = my_temp_table.products_id
Était-ce utile?

La solution

Lorsque j’utilisais MySQL sans prendre en charge les sous-requêtes ni les mises à jour multi-tables, j’utilisais une astuce pour faire ce que vous décrivez. Exécutez une requête dont les résultats sont eux-mêmes des instructions SQL, puis enregistrez la sortie et exécutez-la en tant que script SQL.

SELECT CONCAT( 
  'UPDATE products SET products_ordered = ', 
   SUM(products_quantity), 
  ' WHERE product_id = ', products_id, ';') AS sql_statement
FROM orders_products
GROUP BY products_id;

En passant, il n’existe pas de version MySQL 3.5.x à ma connaissance. Je pense que vous avez peut-être rapporté que mal. Sinon, vous utilisez un autre produit tel que mSQL.

Modifier: j'ai oublié d'ajouter un point-virgule dans l'instruction SQL générée par la requête ci-dessus.

Autres conseils

Les mises à jour multi-tables ne sont pas prises en charge dans MySQL < = 4.0.4 Je recommande fortement de mettre à jour votre serveur vers MySQL 5.0.xx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top