Php ; mysql

houdaelfa12 Messages postés 5 Statut Membre -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je veux compter des emprunteurs qui ont a fait un prêt d'ouvrages a partir de date pret qui est comprise entre une date1 et date 2 , le comptage des emprunteurs est selon leur sexe (fille, garcon) et selon la filière , ,dans ma base il ya la table emprunteur(N_inscription,nom,prenom,sexe,filiere)
et la table pret(N_pret,datepret , dateretour, N_inventaire) je veux bien savoir la requete de sql

3 réponses

  1. theolius Messages postés 8 Statut Membre
     
    Bonjour,

    Si j’ai bien compris, tu aimerais créer une requête capable de trouver le nombre de personnes qui a emprunté un « item » selon son sexe et sa filière.

    Pour ce faire, une des possibilités est d’utiliser la fonction COUNT(*).

    Sauf que, selon tes tables, il manque visiblement la liaison entre l’item en prêt et l’emprunteur.

    Comment sais-tu que, par exemple, M. Dupont a emprunté le livre «fahrenheit 451 » ?

    Cordialement
    0
    1. houdaelfa12 Messages postés 5 Statut Membre
       
      en fait j'ai des 3 tables
      emprunteur(N_inscription,nom, prenom,sexe,filiere)
      ouvrages(N_inventaire,cote,auteur)
      prêt(N_pret,datepret,dateretour,N_inscription,N_inventaire)
      un emprunteur(N_inscription) realise un prêt pendant la date de pret et la date de retour
      moi je veux calculer le nombres des emprunteurs selon la filière et selon leur sexe pendant la date de pret et la date de retour , je veux 2 requetes sql
      une requête pour calculer les emprunteurs selon leur filière
      et l'autre requête pour calculer le nombre d'emprunteurs selon leur sexe
      jespre tu as compris
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Pour commencer... il faudrait savoir avec quel SGBD tu bosses ... (mysql, oracle, access... autre ???)

    Ensuite.. dans la majorité des SGBD ... tu pourras réaliser tes deux requêtes simplement à l'aide des instructions SELECT COUNT et WHERE et éventuellement du GROUP BY !

    Un truc du genre :
    
    SELECT E.filiere , E.sexe, COUNT(E.N_inscription) as NB
    FROM pret P
    LEFT JOIN emprunteur E  ON E.N_inscription = P.N_inscription
    LEFT JOIN ouvrages O ON O.N_inventaire = P.N_inventaire
    WHERE P.datepret >= '2017-01-01' AND P.dateretour <= '2017-07-01'
    GROUP BY E.filiere , E.sexe
    


    NB : N'utilises pas de caractères accentués dans le nom de tes tables ni dans le nom de tes champs. Ta table "prêts" doit être renommée en "pret"
    0
    1. houdaelfa12 Messages postés 5 Statut Membre
       
      merci , oui je bosses dans le SGBD Mysql , et je veux savoir c'est quoi E.filiere ? c'est quoi le E et une autre chose , pour l'exemple que tu mas donne tas précisé la date mais mois je veux faire une date de pret et retour quelconque ?
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > houdaelfa12 Messages postés 5 Statut Membre
         
        E c'est ce qu'on appelle un alias.

        Et pour la date... c'est un exemple. A toi de l'adapter à tes besoins
        0
    2. houdaelfa12 Messages postés 5 Statut Membre
       
      ok merci bcq , une dernière question , en fait je veux supprimer UN PRET du table pret et en même temps je veux supprimer les champs qui sont relies avec cette table jai essaye ce code mais ca ne marche pas
      $sql="DELETE e,p,o
      FROM emprunteur e
      INNER JOIN pret p
      ON e.N_inscription=p.N_inscription INNER JOIN ouvrages o.N_inventaire=p.N_inventaire where (N_pret=$N_pret)";
      mysql_query($sql);
      0
  3. houdaelfa12 Messages postés 5 Statut Membre
     
    $sql1="DELETE *
    FROM emprunteur
    WHERE N_inscription IN
      (SELECT N_inscription 
      FROM pret 
      WHERE   (N_pret=$N_pret)" ;
    $sql2="DELETE  N_inventaire FROM ouvrages where N_inventaire IN (SELECT N_inventaire FROM pret WHERE (N_pret=$N_pret) ";
    $sql3="DELETE datepret,dateretour FROM pret where (N_pret=$N_pret)";
    mysql_query($sql1);
    mysql_query($sql2);
    mysql_query($sql3);
     if($sql1||$sql2||$sql3)
      {
        echo("La suppression à été correctement effectuée<br><br>") ;
     
     echo("<a href=\"afficher1.php\">afficher la liste </a>");
      } 
    


    EDIT : Ajout des balises de code (la coloration syntaxique).

    Explications disponibles ici :ICI

    Merci d'y penser dans tes prochains messages.
    Jordane45

    jai essaye ca mais ca ne marche plus :/
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      1 - NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
      Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

      2 - Attention, l'extension mysql était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0.
      https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

      À la place, tu peux (<gras DOIS </gras> ) utiliser l'extension MySQLi ou l'extension PDO_MySQL
      https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

      Si tu choisis PDO, pense à activer la gestion des erreurs : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      3 - Tu dis que ça ne "marche pas" .. c'est à dire ??
      As tu au moins essayé tes requêtes DIRECTEMENT dans ta bdd (via phpmyadmin par exemple) ???
      Car ton souci vient de ta syntaxe du DELETE ....
      En fait, tu peux faire un delete sur plusieurs tables en même temps... c'est juste qu'il faut correctement l'écrire !
      Comme dans l'exemple donné dans la doc (https://dev.mysql.com/doc/refman/5.7/en/delete.html
      DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
      WHERE t1.id=t2.id AND t2.id=t3.id;
      


      Essaye :
      DELETE emprunteur , pret ,ouvrages 
      FROM emprunteur 
      INNER JOIN pret ON emprunteur.N_inscription=pret.N_inscription 
      INNER JOIN ouvrages ON ouvrages.N_inventaire=pret.N_inventaire 
      WHERE (pret.N_pret='$N_pret')
      
      
      0