IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Modifier une requête par des données différente


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut Modifier une requête par des données différente
    Bonjour,

    J'ai créer une requete pour insérer des noms dans une table (qualification).
    Je voudrais maintenant dans cette table modifier un des champ par par le nom d'une ville.
    Je veux que cette modification ce fasse pour les 32 premiers nos et que les 32 noms suivants ai un autre nom de ville et ainsi de suite.

    [/code]$req6="update qualification set n_tournoi = (select nom_tournoi from tournoi where vainqueur='' order by date_tournoi limit 1);";
    $res6=mysql_query($req6);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Voilà le début de ma requête çà m'insère donc le nom d'une ville mais pour tout les noms de personne, je voudrais qu'au bout du 32ème nom çà insère le nom de l'autre ville.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    pardon voilà plutot a quoi ressemble ma requete pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req16="select nom_tournoi from tournoi where vainqueur='' and date_tournoi='$date' group by num_tournoi order by num_tournoi";
    	$res16=mysql_query($req16);
    	while($row16=mysql_fetch_row($res16))
    	{
    	$tournoi=$row16[0];
    	$req6="update qualification set n_tournoi = '$tournoi' limit 32;";
    	$res6=mysql_query($req6);
    	echo"$tournoi";
    	}

  3. #3
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Tu pourrais être plus clair, nous donner ta version de MySQL, la structure des tables, et ce que tu veux vraiment faire ?
    Pensez au bouton

  4. #4
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    Voici la structure de ma table qualification :
    CREATE TABLE `qualification` (
    `num_qualif` int(3) NOT NULL auto_increment,
    `n_tournoi` varchar(50) NOT NULL,
    `name` varchar(25) NOT NULL default '',
    `tour` varchar(50) NOT NULL default '',
    PRIMARY KEY (`num_qualif`)
    )

    Et de ma table tournoi :
    CREATE TABLE `tournoi` (
    `num_tournoi` int(11) NOT NULL auto_increment,
    `nom_tournoi` varchar(25) NOT NULL default '',
    `logo` varchar(80) NOT NULL,
    `lieu` varchar(25) NOT NULL,
    `pays_tournoi` varchar(25) NOT NULL default '',
    `categorie` varchar(25) NOT NULL default '',
    `surface` varchar(25) NOT NULL default '',
    `date_tournoi` date NOT NULL,
    `nb_joueur` int(3) NOT NULL,
    `cout` int(7) NOT NULL,
    `vainqueur` varchar(25) NOT NULL default '',
    PRIMARY KEY (`num_tournoi`),
    KEY `num_tournoi` (`num_tournoi`)
    )

    Donc je veux que dans ma table qualification où il y a déjà un certain nombre de nom d'insérer que dans la colonne n_tournoi on modifie le nom en mettant les noms du résultats de ma 1ère requête. Dans cette requête par exemple j'ai 3 noms de ville. Je veux donc que dans les 32 premiers noms de joueur qualifié ce mette le noms de la 1ère ville, les 32 suivants les noms de la deuxième et les 32 suivants le noms de la 3ème.

  5. #5
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req16="select nom_tournoi from tournoi where vainqueur='' and date_tournoi='$date' group by num_tournoi order by num_tournoi";
       $res16=mysql_query($req16);
       while($row16=mysql_fetch_row($res16))
       {
       $tournoi=$row16[0];
       $req6="update qualification set n_tournoi = '$tournoi' limit 32;";
       $res6=mysql_query($req6);
       echo"$tournoi";
       }
    A mon avis ça devrait marcher, peut-être en enlevant le point-virgule à la fin de la requête UPDATE.

    Dans le cas contraire, merci de nous donner l'erreur renvoyée par MySQL
    Pensez au bouton

  6. #6
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    çà ne fonctionne pas mieux. Pas de message d'erreur.
    Les 32 premiers noms ont le nom de la ville modifier et le reste rien.

  7. #7
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    J'ai bien vérifié la 1ère requête qui sélectionne les noms de ville, çà me retroune bien 3 noms. Donc les 32 premiers joueurs ont le nom d'une des villes inséré mais par le reste.

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    A ce stade là c'est du debug de script PHP plus qu'autre chose.

    Citation Envoyé par jérôme
    Citation Envoyé par hachesse
    Nous vous rapellons aussi que ce forum n'est ni un debuguer et ni un tutoriel. Ce forum doit permettre l'entraide lorsque vous rencontrez un problème que vous ne pouvez résoudre avec la documentation et poser une question sur ce forum doit-être un ultime recours.
    Pour continuer dans le même sens et pour que le forum ne devienne pas un débuggueur de requête sql qui foire, il y a 2 choses très simples à faire lorsque vous vous trouvez dans ce cas de figure.
    1) Afficher la requête à l'écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete = "....." 
    echo $requete ;
    Ca vous permet ainsi de vérifer que tous les champs sont bien remplis, que le type (string, numérique, ...) correspond

    2) Afficher le message d'erreur renvoyé par mysql (ou autre sgbd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // exécution de la requête
    echo mysql_error() ;
    Voilà, si vous appliquez cette règle, les questions sur les requêtes foireuses ne devraient plus pulluler sur le forum car vous devriez être en mesure de corriger vos erreurs seul.
    http://www.developpez.net/forums/viewtopic.php?t=32188
    Pensez au bouton

  9. #9
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    J'ai fais ce ke tu m'as dis. Pas de message d'erreur.
    Le echo de ma requête donne ceci :
    select nom_tournoi from tournoi where vainqueur='' and date_tournoi='2006-01-02' group by num_tournoi order by num_tournoiupdate qualification set n_tournoi = 'Next Generation Adelaide' limit 32update qualification set n_tournoi = 'Quatar ExxonMobil Open' limit 32update qualification set n_tournoi = 'Chennai Open' limit 32

    Donc le nom des villes qu'il doit écrire au nom des joueurs qualifié passe bien. Mais quand je regarde dans ma base il me met Chennai Open au 32 premier mais rien au reste. En fait il modifie surement les 32 premiers a chaque fois mais ne passe jamais au 33ème joueur.
    Il doit ecrire le nom de la ville au 32 premier, puis l'autre nom de la ville au 32 premier encore une fois.
    Comment régler ce problème ?

  10. #10
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Oui, en fait le UPDATE n'accepte pas la syntaxe LIMIT X, Y pour mettre à jour des plages de lignes déterminées.

    Si la colonne n_tournoi est vide avant de réaliser l'opération, tu peux faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update qualification set n_tournoi = '$tournoi' 
    WHERE n_tournoi='' (ou IS NULL)
    limit 32;
    Ce qui aura pour effet à chaque tour de boucle de ne mettre à jour que les lignes qui ne contiennent pas déjà de n_tournoi...
    Pensez au bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/12/2008, 15h21
  2. Modifier propriété <source base> d'une requête par VBA ou SQL?
    Par 1010titi dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 26/11/2008, 21h16
  3. Réponses: 5
    Dernier message: 03/09/2008, 14h19
  4. Réponses: 2
    Dernier message: 05/07/2007, 21h11
  5. Réponses: 5
    Dernier message: 13/12/2006, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo