MySQL - SÉLECTIONNEZ ensuite la mise à JOUR
J'ai un script écrit en PHP qui a cette ligne qui fonctionne correctement pour sélectionner les données dont j'ai besoin;
$result = mysql_query("SELECT product_name, sku, qty FROM supplier_dropship_items WHERE supplier_id = '3' AND status = '2'", $db_beb);
Ce que je suis mal, c'est une façon de mettre à jour les dossiers que j'ai choisi, une fois sélectionnée, j'ai besoin de changer la status = '1'
de sorte que la prochaine fois que mon script s'exécute de ne pas tirer les mêmes données dans le sélectionner et tirer uniquement de nouveaux éléments dans le tableau de l'état 2.
C'est mon travail le résultat grâce aux commentaires de la accepté de répondre ci-dessous;
$result = mysql_query("SELECT id, product_name, sku, qty FROM supplier_dropship_items WHERE supplier_id = '3' AND status = '2' FOR UPDATE", $db_beb);
while($row = mysql_fetch_assoc($result))
{
$sql_table_data[] = $row;
mysql_query("UPDATE supplier_dropship_items SET status=1 WHERE id='".$row['id']."'", $db_beb);
}
exécuter la mise à jour de la requête après la requête select
OK, Désolé, je suis en train d'apprendre MySQL. Si j'ai fait une autre mise à jour après le select, je pouvais techniquement changer un produit qui peut avoir été ajoutée après le select qui ne seraient pas disponibles à l'époque pour sélectionner la prochaine fois que le script s'exécute? Si cela fait sens.
Pas si vous mettez à jour uniquement les produits que vous avez sélectionnés dans la première place. (Ou cue sur tout ce qui est en votre clé primaire)
avez-vous de la clé primaire dans la table si oui, alors vous pouvez exécuter
OK, Désolé, je suis en train d'apprendre MySQL. Si j'ai fait une autre mise à jour après le select, je pouvais techniquement changer un produit qui peut avoir été ajoutée après le select qui ne seraient pas disponibles à l'époque pour sélectionner la prochaine fois que le script s'exécute? Si cela fait sens.
Pas si vous mettez à jour uniquement les produits que vous avez sélectionnés dans la première place. (Ou cue sur tout ce qui est en votre clé primaire)
avez-vous de la clé primaire dans la table si oui, alors vous pouvez exécuter
update table set status = '1' where primarykey_column in(primaykey ids of selected records)
OriginalL'auteur TheWebsiteGuy | 2014-07-05
Vous devez vous connecter pour publier un commentaire.
Si
supplier_dropship_items
a une clé primaire (il devrait), puis d'inclure ces champs dans laSELECT
, puis, lorsque vous parcourez les résultats, exécutez uneUPDATE
à l'aide de la clé primaire pour définir lastatus
, comme dans:Ceci suppose que vous ne sont pas en cours d'exécution dans une concurrente de l'environnement. Si vous êtes, alors vous devez le verrouiller les enregistrements de mise à jour, en utilisant
SELECT... FOR UPDATE
. Vous pouvez lire à ce sujet ici. Autant que je sache, cela fonctionne sous MySQL sur les tables InnoDB.LOCK TABLES supplier_dropship_items WRITE
Merci @Marion C Ascanio, cela fonctionne parfaitement et surtout, je le comprends 🙂 je vais ajouter le résultat de la question des fins de référence.
Grand, @Innov8! Content d'avoir pu aider!
OriginalL'auteur Mariano D'Ascanio
Il suffit de faire la
UPDATE
lorsque vousSELECT
en même temps.Changer cela:
:
C'est en supposant que vous avez une colonne d'ID à l'intérieur de votre table comme c'est comment il devrait être mis en place à la table normalisée.
$result
pour moi d'utiliser ensuite dans mon script php?ok, alors il suffit d'exécuter la requête avant d'exécuter la mise à jour. fondamentalement, il suffit d'exécuter votre requête si vous l'avez dans $result et ensuite mettre à jour la table par la suite si cela fait sens.
Cette syntaxe résultats dans des erreurs sur mon serveur MySQL: 1. Une expression qui était attendu. (à proximité "(" à la position 39) 2. Jeton inattendu. (à proximité "(" à la position 39) 3. Une nouvelle déclaration a été trouvé, mais pas de séparateur entre elle et la précédente. (près de "SÉLECTIONNER" à la position 46)
c'est une erreur de syntaxe, ne vous copie pas sur comment le faire correctement?
OriginalL'auteur John Ruddell