J'ai écrit du code pour mettre à jour certaines lignes d'une table avec une séquence décroissante de nombres. Pour sélectionner les lignes correctes, je dois joindre deux tables. La dernière ligne de la table doit avoir la valeur 0, la seconde dernière -1 et ainsi de suite. Pour y parvenir, j'utilise ORDER BY DESC. Malheureusement, mon code évoque l'erreur suivante:Utilisation incorrecte de UPDATE et ORDER BY
utilisation incorrecte de UPDATE et ORDER BY
Ma lecture suggère que je ne peux pas utiliser UPDATE, JOIN et ORDER BY ensemble. J'ai lu que peut-être des sous-requêtes pourraient aider? Je n'ai vraiment aucune idée de comment changer mon code pour le faire. Peut-être que quelqu'un pourrait poster une version modifiée qui fonctionnera?
while($row = mysql_fetch_array($result)) {
$products_id = $row['products_id'];
$products_stock_attributes = $row['products_stock_attributes'];
mysql_query("SET @i = 0");
$result2 = mysql_query("UPDATE orders_products op, orders ord
SET op.stock_when_purchased = (@i:=(@i - op.products_quantity))
WHERE op.orders_id = ord.orders_id
AND op.products_id = '$products_id'
AND op.products_stock_attributes = '$products_stock_attributes'
AND op.stock_when_purchased < 0
AND ord.orders_status = 2
ORDER BY orders_products_id DESC")
or die(mysql_error());
}
Si je n'utilise pas ORDER BY, ma séquence de numéros ira dans la mauvaise direction. – nico55555
Un ORDER BY dans une instruction UPDATE peut être utile pour s'assurer que vous n'obtiendrez aucun blocage sur une table de verrouillage de ligne dans un environnement de haute simultanéité – Spredzy
Une commande par peut être utilisée pour modifier une colonne avec une contrainte unique pour assurer vous ne frappez pas les clés en conflit. Par exemple, si vous avez une colonne pour la priorité ou la séquence, il peut être souhaitable de décrémenter tous les numéros de séquence au-dessus d'une certaine valeur. Si vous commandez par cette colonne dans l'ordre croissant, vous pouvez être sûr que vous n'aurez pas de clés en double. – jcbwlkr