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 :

besoin d'aide pour creer une hierarchie PHP sqL(MYSql)


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut besoin d'aide pour creer une hierarchie PHP sqL(MYSql)
    Bonjour

    J'ai deux tables une première Utilisateur(IdUtilisateur,nom,prenom,chefID) chefID et IdUtilisateur etant recursif c'est à dire chaque
    utilisateur a un chef
    je voudrais que si l'utilisateur par Exemple 5 crée un document que seulement son chef et lui y est accès

    Sachant que que la table document contient Document(idDocument,idUtilisateur,typeDocument,frais...)

    J'ai essayer ça mais ça ne donne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <?php $req=$db->query("select * from Document where
    session=(select chefId from utilisateur,Document
    where utilisateur.id_utilisateur=Document.id_utilisateur
    and session=Document.utilisateur)");?>

    session etant l'id de l'utilisateur connecté.

    Toute aide est la bienvenue je galère depuis!!! A noter que mon probleme c'est trouver la bonne requete sql

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    MySQL ne supporte pas les requêtes récursives introduites avec la norme SQL:1999 de 1999 nécessaire à ce genre de requêtes. Changez de SGBDR ! Tous les autres les supportent !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Besoin d'aide pour creer une hierarchie Php sql( mysql)
    j'ai trouvé la solution à mon problème voici le code si ça peut aider quelqu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public static function getListclientProspects(){
    		include('connexion.php');
    		$personne=$_SESSION['login'];
     
    		$reqDocument = $db ->prepare('SELECT client_prospect.* , utilisateur.* FROM client_prospect
    		 INNER JOIN utilisateur ON client_prospect.utilisateur=utilisateur.id_utilisateur 
    		 LEFT JOIN utilisateur chef ON utilisateur.chefId=chef.id_utilisateur 
    		 WHERE utilisateur.id_utilisateur =:a OR utilisateur.chefId =:b');
           		$reqDocument->bindValue(':a', $personne);
           		$reqDocument->bindValue(':b', $personne);
              $reqDocument->execute();
     
               $results = Array();
    		while ($ligne=$reqDocument->fetch()){
     
    				$clientProspects = clientProspects::readRowCL($ligne);
    			if($ligne !== false)
    				$results[] = $clientProspects;
     
    				}
     
     
    		return $results;
     
     
    	}

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut SQLPRO.

    Citation Envoyé par SQLpro Voir le message
    MySQL ne supporte pas les requêtes récursives introduites avec la norme SQL:1999 de 1999 nécessaire à ce genre de requêtes. Changez de SGBDR ! Tous les autres les supportent !

    A +
    Il faudrait se tenir au courant de ce qui se fait actuellement sous mysql. Il est maintenant possible de faire de la récursivité. Et voici la preuve de ce que j'avance.

    1) mettre dans le fichier "my.ini" la directive suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max_sp_recursion_depth = 255
    Cela signifie que tu as une pile de 255 éléments pour effectuer ta récursivité.
    Au delà d'une profondeur de 255, ça plante !!!

    2) faire une procédure stockée utilisant la récursivité. Voici un exemple très basique : une suppression en cascade.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ============
    -- Base `Essai`
    -- ============
     
    DROP DATABASE IF EXISTS `essai`;
     
    CREATE DATABASE `essai`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
     
    USE `essai`;
     
    COMMIT;
     
    -- ============
    -- Table `test`
    -- ============
     
    DROP TABLE IF EXISTS `test`;
     
    CREATE TABLE test (
      id     INT unsigned NOT NULL AUTO_INCREMENT,
      next   INT unsigned default NULL,
      PRIMARY KEY(ID)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =================
    -- Procédure stockée
    -- =================
     
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `test`$$
     
    CREATE PROCEDURE `test`(_i int)
    BEGIN
    DECLARE _fin INTEGER DEFAULT 1;
    DECLARE _z   INTEGER DEFAULT 0;
    DECLARE _tab CURSOR FOR SELECT id FROM test WHERE next = _i;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
    OPEN _tab;
    FETCH _tab INTO _z;
     
    WHILE (_fin)
    DO
    	DELETE FROM test WHERE id = _z;
     
    	CALL test(_z);
     
    	FETCH _tab INTO _z;
    END WHILE;
     
    CLOSE _tab;
     
    DELETE FROM test WHERE id = _i;
     
    END $$
    DELIMITER ;
     
    COMMIT;
     
    -- ==================
    -- Remplissage `test`
    -- ==================
     
    INSERT INTO test (`id`,`next`) VALUES
    (1,6),(2,4),(3,7),(4,NULL),(5,8),(6,9),(7,9),(8,NULL),(9,NULL)
    ;
     
    -- =============
    -- Vidage `test`
    -- =============
     
    select * from test;
     
    -- =======================
    -- Appel Procédure Stockée
    -- =======================
     
    call test(9);
     
    select *
    from test;
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    3) Et voici le résultat de son exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `essai`
    --------------
     
    --------------
    CREATE DATABASE `essai`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    COMMIT
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE test (
      id     INT unsigned NOT NULL AUTO_INCREMENT,
      next   INT unsigned default NULL,
      PRIMARY KEY(ID)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP PROCEDURE IF EXISTS `test`
    --------------
     
    --------------
    CREATE PROCEDURE `test`(_i int)
    BEGIN
    DECLARE _fin INTEGER DEFAULT 1;
    DECLARE _z   INTEGER DEFAULT 0;
    DECLARE _tab CURSOR FOR SELECT id FROM test WHERE next = _i;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _fin = 0;
     
    OPEN _tab;
    FETCH _tab INTO _z;
     
    WHILE (_fin)
    DO
            DELETE FROM test WHERE id = _z;
     
            CALL test(_z);
     
            FETCH _tab INTO _z;
    END WHILE;
     
    CLOSE _tab;
     
    DELETE FROM test WHERE id = _i;
     
    END
    --------------
     
    --------------
    COMMIT
    --------------
     
    --------------
    INSERT INTO test (`id`,`next`) VALUES
    (1,6),(2,4),(3,7),(4,NULL),(5,8),(6,9),(7,9),(8,NULL),(9,NULL)
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+------+
    | id | next |
    +----+------+
    |  1 |    6 |
    |  2 |    4 |
    |  3 |    7 |
    |  4 | NULL |
    |  5 |    8 |
    |  6 |    9 |
    |  7 |    9 |
    |  8 | NULL |
    |  9 | NULL |
    +----+------+
    --------------
    call test(9)
    --------------
     
    --------------
    select *
    from test
    --------------
     
    +----+------+
    | id | next |
    +----+------+
    |  2 |    4 |
    |  4 | NULL |
    |  5 |    8 |
    |  8 | NULL |
    +----+------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Je n'ai pas parlé de procédure récursives... Mais de requêtes SQL récursives !
    Apprenez le SQL... Mon site web, comme mon bouquin, peuvent vous y aider.
    Notamment : http://sqlpro.developpez.com/cours/s...te-recursives/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Besoin d'aide pour ecrire une Proc en SQL SERVER
    Par dbjr81 dans le forum Développement
    Réponses: 5
    Dernier message: 10/10/2014, 19h16
  2. Réponses: 11
    Dernier message: 13/05/2013, 16h59
  3. Réponses: 11
    Dernier message: 04/04/2012, 13h35
  4. besoin d'aide pour creer une matrice n*m
    Par mister_gold dans le forum Général Python
    Réponses: 6
    Dernier message: 20/11/2010, 12h32
  5. Besoin d'aide pour optimiser une petite query sql
    Par AsmCode dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/01/2009, 14h52

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