Je crée une application Web qui agit comme une liste de priorités, permettant à un utilisateur de réorganiser un ensemble d'éléments dans une liste et de stocker cet arrangement dans une base de données MySQL via un backend PHP.Comment définir dynamiquement une valeur croissante par ligne dans MySQL
Au moment où l'utilisateur a fini d'arranger ses éléments et d'enregistrer la configuration, j'appelle une instruction UPDATE séparée pour chaque ligne, en insérant le priorityLevel (position dans la liste) pour chaque ligne.
Par exemple: (pas mon code de production, mais cela illustre le point)
<?php
$items = array(12, 17, 27, 26, 5); // an array of IDs, in proper order
// due to nature of foreach loop in PHP, this makes $order be the key value,
// in this case, 0, 1, 2, 3, 4 respectively
foreach ($items as $order => $item)
{
$database->query("UPDATE `table` SET `priorityLevel` = {$order} " .
"WHERE `ID` = {$item}");
}
?>
Cela fonctionne assez bien, mais il semble peu efficace pour exécuter tant de requêtes UPDATE, en particulier lorsque la liste devient longue et nous re-commander de nombreux articles. J'espérais qu'il y avait un moyen de créer de façon dynamique l'ordre dans la commande UPDATE, quelque chose comme ceci:
<?php
$database->query("UPDATE `table` SET `priorityLevel` = ORDER_NUMBER " .
"WHERE `ID` IN (12, 17, 27, 26, 5)");
?>
... où NUMÉRO_COMMANDE était un nombre dynamique déterminé peut-être par la position de la valeur d'identité dans la clause WHERE . Il devrait également respecter l'ordre des éléments de la clause WHERE et s'assurer que le niveau priorityLevel a été défini en fonction des souhaits de l'utilisateur.
Est-ce que quelqu'un sait si cela est possible dans un environnement MySQL 5/PHP 5? La table utilise le moteur MyISAM pour ne pas prendre en charge les transactions.
(PS - Je sais que certaines des bases de assez bien MySQL, mais je suis loin d'être un expert, donc s'il y a quelque chose en cause ici au-delà de simples CREATE, INSERT, UPDATE, DELETE, s'il vous plaît être descriptif)
(PPS - Ce sujet est difficile pour Google, car les termes sont trop génériques.Si je recherche 'mysql order', je reçois un tas de tutoriels sur la création d'applications Panier pour MySQL!)
Cette question est presque exactement comme celui-ci: http://stackoverflow.com/questions/547534/mysql-based-web-app-easiest-way-for- users-to-choose-order-or-items – ryeguy
Ah, c'est très similaire, merci d'avoir signalé cela. Je n'ai pas trouvé de questions similaires quand je cherchais par moi-même. Cependant, cette question semble plus préoccupé par QUAND pour effectuer la commande, je me demande s'il existe un autre comment enregistrer la commande. –