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

PHP & Base de données Discussion :

Requete en cascade [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut Requete en cascade
    Bonsoir bonsoir.

    Je viens à vous en dernier recours... Je viens de passer grands temps mais je comprends pas. Voilà mon problème.

    Je veux exécuter une requête pour faire un test. Si la requête existe, une nouvelle requête est formulée, sinon une troisième requête sera faite.

    Voilà mes requêtes :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	$requete = mysql_query("SELECT * FROM directeurs where id='".$id."'");
    	$donnees = mysql_fetch_array($requete);
     
    	if(mysql_query("SELECT * FROM directeurs where filiere = '".$donnees['filiere']."' AND nom = '".$donnees['nom']."' ORDER by nom, prenom") != NULL)
    	{
    		$requete_next = mysql_query("SELECT * FROM directeurs where filiere = '".$donnees['filiere']."' AND nom = '".$donnees['nom']."' AND prenom > '".$donnees['prenom']."' ORDER by prenom LIMIT 1");
    	}
    	else
    	{
    		$requete_next = mysql_query("SELECT * FROM directeurs where filiere = '".$donnees['filiere']."' AND nom > '".$donnees['nom']."' ORDER by nom, prenom LIMIT 1");
    	}
    	$donnees_next = mysql_fetch_array($requete_next);
    	echo $donnees_next['prenom'];
    Si la première condition est remplie, ça effectue la requête interne, mais si la première requête ne renvoie rien, beh le else ne fonctionne pas .

    Merci par avance pour votre aide.

    Cordialement

    Nicolas.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 55
    Par défaut
    Bonjour,

    Un petit coup d'oeil sur php.net (http://fr2.php.net/manual/en/function.mysql-query.php) nous apprend que :
    mysql_query() retourne false si l'accès est interdit ou s'il y a eu une erreur.

    Je suppose que vous vouliez en fait faire quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    si (aucun_resultat(req1)
    alors
     req2=...;
    sinon
     res2=...;
     
    ...
    Il faut dans ce cas utiliser la fonction mysql_num_rows(), ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $requete = mysql_query("SELECT * FROM directeurs where id='".$id."'");
    $donnees = mysql_fetch_array($requete);
     
    if(mysql_num_rows(mysql_query("SELECT * FROM directeurs where filiere = '".$donnees['filiere']."' AND nom = '".$donnees['nom']."' ORDER by nom, prenom") )
    {
    $requete_next = mysql_query("SELECT * FROM directeurs where filiere = '".$donnees['filiere']."' AND nom = '".$donnees['nom']."' AND prenom > '".$donnees['prenom']."' ORDER by prenom LIMIT 1");
    }
    else
    {
    $requete_next = mysql_query("SELECT * FROM directeurs where filiere = '".$donnees['filiere']."' AND nom > '".$donnees['nom']."' ORDER by nom, prenom LIMIT 1");
    }
    $donnees_next = mysql_fetch_array($requete_next);
    echo $donnees_next['prenom'];
    Cela répond-il à votre question ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut
    En fait, après avoir posté, j'ai regardé encore et j'avais corrigé l'erreur.
    Néanmoins, cela ne résout pas le problème.
    En effet, ça marche nickel si la première requête renvoie quelque chose, mais dès qu'elle ne renvoie rien, la requête du "else" n'est pas prise en compte, et je comprends pas pourquoi.

    Merci pour tout.

    Edit : J'ai vérifié toutes les requêtes une par une, elles fonctionnent à merveille.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom > '".$donnees['nom']."'
    Qu'est-ce que ça signifie ?

    Ensuite, le ' SELECT * ' n'est pas du tout optimisé, tu devrais selectionner des valeurs précises ( SELECT `filiere`,`president` FROM .. ) .

    Ensuite, il faut bien le mysql_num_rows, sinon le code n'a aucun sens ..

    Cependant, je ne comprends toujours pas le but de cet extrait de code .. peux tu nous l'expliquer ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 61
    Par défaut
    Hello.

    Désolé d'avoir laissé ce topic dans un état végétatif ^^.
    En fait, le but du code est simple : faire un suivant précédent à partir d'une liste d'une base de données. D'abord par nom, ensuite par prénom si le nom est identique.

    J'ai résolu mon problème entre temps, grâce à des tests supplémentaires.

    Merci pour votre aide.

    Enfin : nom > '".$donnees['nom']."' signifie que j'veux que le nom que je sélectionne soit celui d'après ds la bdd afin de faire le suivant.

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

Discussions similaires

  1. [SQL] requete en cascade ?
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/11/2007, 17h31
  2. Requete en cascade
    Par Te-Deum dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/10/2006, 14h54
  3. imbrication de 2 requetes en cascade
    Par @rkane dans le forum Access
    Réponses: 4
    Dernier message: 11/09/2006, 23h32
  4. Requetes de suppression en cascade
    Par log2n dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 20/05/2005, 10h07
  5. Sous requete en cascade ou curseur ??
    Par HULK dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 31/12/2004, 09h56

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