Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2011, 21h39   #1
Membre habitué
 
Inscription : novembre 2002
Messages : 217
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 217
Points : 127
Points : 127
Par défaut SELECT et UPDATE dans une même requete

Bonjour,

pour parcourir l'ensemble des données d'une table, j'utilise un champ "Parsed" qui indique que la ligne a été traitée; j'effecture donc d'abord une requete:

Code :
SELECT ID, ... WHERE parsed = 0
puis

Code :
UPDATE SET parsed = 1 WHERE ID = XXX
je me disais qu'il y aurait peut etre un moyen de faire les deux requetes en mm temps?
gael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 21h47   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Si le but est de mettre à 1 partout où parsed = 0, il n'y a même pas besoin de condition dans l'UPDATE !

Mais j'ai l'impression que ton processus est un peu plus compliqué que ce que tu expliques. Ne serait-ce pas celui-ci :

1) Extraction des lignes où parsed = 0.
2) Traitement par un utilisateur via un logiciel
3) Mise de parsed à 1 pour chaque ligne traitée.

Si c'est un truc dans le genre, comme il y a quelque chose qui n'est pas fait par la BDD entre les deux étapes que tu as décrites, ce n'est pas faisable en une seule requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 21h57   #3
Membre habitué
 
Inscription : novembre 2002
Messages : 217
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 217
Points : 127
Points : 127
Citation:
Si le but est de mettre à 1 partout où parsed = 0, il n'y a même pas besoin de condition dans l'UPDATE !
Le champ parsed me sert parce que la base est assez grande et le traitement pour chaque ligne est assez long, et je l'utilise en local sur mon pc, je peux donc ainsi interrompre les traitements effectués et les reprendre.

Citation:
Si c'est un truc dans le genre, comme il y a quelque chose qui n'est pas fait par la BDD entre les deux étapes que tu as décrites, ce n'est pas faisable en une seule requête.
En effet, la requete UPDATE est effectuée à la suite du traitement externe des données mais ce n'est pas vraiment un problème; ce n'est pas grave si une ligne n'est pas traitée correctement.
gael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 22h58   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
S tu nous expliques plus en détail ton processus, on pourra peut-être t'aider mais pour le moment les infos sont insuffisantes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 23h14   #5
Membre habitué
 
Inscription : novembre 2002
Messages : 217
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 217
Points : 127
Points : 127
Me question est générale: peut-on effectuer une requête qui fasse une sélection en même temps que de mettre à jour des données?
gael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 00h36   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Oui c'est possible, avec par exemple un IN :
Code :
UPDATE matable1 SET macol1 = 1 WHERE mapk IN (SELECT ...)
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 01h57   #7
Membre habitué
 
Inscription : novembre 2002
Messages : 217
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 217
Points : 127
Points : 127
Code :
1
2
 
UPDATE matable1 SET macol1 = 1 WHERE mapk IN (SELECT ...)
Je ne pense pas que cette requête fasse ce que je cherche: il faudrait que la requete puisse retourner le résultat du SELECT, ou que le UPDATE puisse retourner les ids des lignes modifiées:

dans une discussion sur un autre site j'ai trouvé cela :
Citation:
  1. UPDATE test
  2. SET resultat = 'recuperer'
  3. OUTPUT inserted.ID
  4. WHERE nom = 'pierre'
on y parle d'une option
OUTPUT inserted.ID valable pour SQL Server. Si c'était possible en mysql, ça serait une solution qui me conviendrait.
gael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h00.


 
 
 
 
Partenaires

Hébergement Web