2011-06-03 4 views
0

J'ai une liste d'éléments dans une table MySQL. L'utilisateur peut commander ces articles en les faisant glisser vers le haut et vers le bas dans une liste HTML. J'ai ensuite besoin de stocker chaque poste dans la liste.Quelle est la meilleure façon de mettre à jour plusieurs lignes uniques d'une table dans MySQL?

Est-il possible de le faire dans un appel MySQL ou doit-il être un appel séparé pour chaque produit pour définir son propre ID de commande?

Un seul appel ressemblerait à quelque chose comme ceci:

UPDATE table_name SET `order` = order_number AND `product_id` = 'X'; 
+0

Alors, exactement quelle est la question. Si vous vouliez mettre à jour plusieurs lignes uniques, vous auriez à changer la clause WHERE non? Alors qu'est-ce qui le rend unique? – JonH

+0

Chaque ligne de la table est un produit unique avec un identifiant unique ... chaque attribut de commande du produit est également unique - c'est-à-dire qu'aucun produit ne peut avoir le même numéro de commande. – diggersworld

Répondre

0

Eh bien, vous pouvez laisser tomber toute la table puis insérez les nouveaux numéros de commande pour tous les produits. Ce n'est que deux déclarations. Cela fonctionnerait tant que cette table ne contient que l'information "order" et aucune autre donnée critique.

+0

Je suis au courant de cette méthode ... mais je me demandais s'il y aurait eu de meilleures solutions qui n'impliquent pas la suppression de données, en particulier pour les scénarios où les données ne pouvaient pas être supprimées pour les contraintes de clés étrangères, auquel cas supposez que la solution consisterait à créer une autre table contenant uniquement les ID de produit et leur numéro de commande. – diggersworld

+0

J'ai créé une table séparée qui ne contient que l'ID de produit et le numéro de commande d'affichage. Ensuite, je nettoie la table et la remplit comme vous l'avez suggéré. – diggersworld

0

Vous pouvez supprimer tous les éléments en question et les réinsérer si aucune autre donnée n'est affectée par celle-ci (CASCADE et similaire). Ce serait deux requêtes; SUPPRIMER avec "WHERE product_id IN ('X', 'Y', ...)" et INSERT avec les valeurs mises à jour pour chaque élément.

Une solution propre serait de faire un UPDATE dans une transaction, mais comme MySQL ne supporte pas la vérification de contrainte différée, vous auriez un problème si l'attribut 'order' est UNIQUE.

Questions connexes