6
votes

SQL - où la clause sur chaque commande définie dans la mise à jour?

J'essaie de créer une requête SQL en PHP pour mettre à jour une table. Est-il possible d'avoir un différent où clause de chaque ligne affectée?

Par exemple, quelque chose comme: xxx

etc? < p> Toute aide appréciée. Merci


0 commentaires

5 Réponses :


2
votes

Nope. Faites-le deux mises à jour: xxx

à la deuxième pensée, vous pouvez utiliser des sous-requêtes ou la déclaration de cas ... xxx

vous pouvez Besoin de faire une sous-requête comme celle-ci: xxx


0 commentaires

9
votes

Vous ne pouvez pas avoir plusieurs clauses pour une instruction SQL, mais vous pouvez utiliser une déclaration de cas pour accomplir ce que vous essayez de faire. Une autre option que vous avez est d'exécuter plusieurs instructions de mise à jour.

Voici un échantillon utilisant l'instruction Case: xxx

Voici un échantillon utilisant plusieurs instructions de mise à jour: xxx


0 commentaires

14
votes

Oui, vous pouvez avec une déclaration de cas.

UPDATE table
SET val = CASE MOD(someproperty, 2)  
           WHEN 0 THEN x 
           WHEN 1 THEN y
          END


3 commentaires

Ceci est techniquement précis et répond à votre question. Cependant, vous voudrez peut-être envisager une capacité de lecture et de soutien lorsque vous décidez de la pratique de codage à utiliser. Je recommande de rompre dans de multiples déclarations d'insertion, car d'autres ont noté à moins d'une question de performance que vous essayez de résoudre.


Les gens semblent avoir peur de la mort des déclarations de cas ou d'autres fonctions de base de données respectueuses de l'ANSI pour une raison quelconque. Il s'agit de la troisième ou de la quatrième fois aujourd'hui que quelqu'un a cité le facteur de lisibilité. La concision fait aussi pour la lisibilité et en fonction de la nature de la mise à jour, une seule instruction peut être plus lisible avec un commutateur plutôt que sur plusieurs états de mise à jour. Cela dépend vraiment du problème et de l'expérience de ceux qui maintiennent sa solution.


@Jay: J'ai ajouté à ce nombre de cas où une seule déclaration de cas peut être préférable.



1
votes
UPDATE TABLE
SET VAL CASE SOMEPROPERTY WHEN 1 THEN X WHEN 2 THEN Y END

0 commentaires

0
votes

une manière compacte et facilement évolutive: xxx

Faites de la requête de cette façon: xxx

Utilisez préparer_query pour éviter les erreurs SQL Syntaxe si Vous traitez des valeurs de chaîne.


1 commentaires

Quoi qu'il en soit, utilisez la mise à jour de 1 requête au lieu de plusieurs comme dans la réponse que vous avez choisie.