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 qui n'affiche aucun resulat [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par skeud Voir le message
    Trouvé .

    Par contre, dans ta table, les id doivent correspondre à l'ordre des menu. (donc le position devient un peu inutile au final). c'est le seul moyen que j'ai trouvé pour l'instant.
    le blem c'est que justement il y a une colonne position pour cela, donc cela ne correspond pas forcement à l'ordre des menu.
    En back-office le menu est gérable en drag & drop, c'est pour cela qu'il y a une colonne position.

  2. #22
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Bon, finalement, j'ai finis par trouvé The very best of solution ^^:

    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
    <?php
     
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '') or die("can' cvonnect");
     
    // on sélectionne la base
    mysql_select_db('test',$db);
     
    $req = mysql_query("select * from (select position, url, nom, 0 as isChild from menu UNION select CONCAT((select position from menu where menu.id=smenu.idMenu), position) as position,url,nom, 1 as isChild from smenu) mymenu order by position") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $inChild = false;
    echo '<ul>';
    while ($res = mysql_fetch_assoc($req))
    {
      if ($res["isChild"] == 1 && $inChild == false)
      {
        echo '<ul>';
    	$inChild = true;
      }
      else if ($res["isChild"] == 0 && $inChild == true)
      {
        echo '</ul>';
    	$inChild = false;
      }
      echo '<li><a href="'.$res["url"].'">'.$res["nom"].'</a></li>';
    }
    echo '</ul>';
    // on ferme la connexion à mysql
    mysql_close();
    ?>
    En tout cas merci pour le casse-tête, ça fait passé le temps ^^.

    Dit moi si ça fonctionne chez toi .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #23
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Si tu fonctionne comme ça, c'est normal de ne plus avoir les menu de base, ils n'ont pas de sous-menu, du coup tu les exclu .....
    +1
    bien vu.

    voilà encore une autre solution :
    Code php : 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
     
    <?php
    $sql="
    SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition, sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    FROM menu AS me
    LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu
    ORDER BY me.position, sme.position
    
    ";
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
     $menu=array();
     $icone=array();
        while ($row=mysql_fetch_array($req) ) {
          if(!isset($menu[$row['menom']]))
          $menu[$row['menom']] = array()  ;
          $icone[$row['menom']]= array('meurl'=>$row['meurl'],'icone'=>$row['meicon'],'smeurl'=>$row['smeurl']);
          $menu[$row['menom']][] = $row;
    }
     
     
    echo '<ul class="menu">';
    foreach ($menu as $key => $value) {
     
      if(empty($icone[$key]['smeurl'])){ //pas de sous menu
         echo "<li><a href='".$icone[$key]['meurl']."'> $key </a></li>";
     
      }else{ //création du sous menu
        echo "<li><a href='".$icone[$key]['meurl']."'> $key </a><ul>";
     
     
     
     
      foreach ($value as $k => $sm) {
                   echo '<li><a href="'.$sm['smeurl'].'">'.$sm['smenom'].'</a></li>';
      }
      echo "</ul></li>";
    }//if
        }
      echo '</ul>';
     
      ?>
    tu peux visualiser le rendu du menu sur jsffidle:menu

    ------------
    Après le menu ne change pas souvent, pour l'optimiser tu peux mettre en cache(memcache par exemple) les arrays contenant les menus pour éviter des appels sql inutiles.

  4. #24
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par skeud Voir le message
    Bon, finalement, j'ai finis par trouvé The very best of solution ^^:

    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
    <?php
     
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '') or die("can' cvonnect");
     
    // on sélectionne la base
    mysql_select_db('test',$db);
     
    $req = mysql_query("select * from (select position, url, nom, 0 as isChild from menu UNION select CONCAT((select position from menu where menu.id=smenu.idMenu), position) as position,url,nom, 1 as isChild from smenu) mymenu order by position") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $inChild = false;
    echo '<ul>';
    while ($res = mysql_fetch_assoc($req))
    {
      if ($res["isChild"] == 1 && $inChild == false)
      {
        echo '<ul>';
    	$inChild = true;
      }
      else if ($res["isChild"] == 0 && $inChild == true)
      {
        echo '</ul>';
    	$inChild = false;
      }
      echo '<li><a href="'.$res["url"].'">'.$res["nom"].'</a></li>';
    }
    echo '</ul>';
    // on ferme la connexion à mysql
    mysql_close();
    ?>
    En tout cas merci pour le casse-tête, ça fait passé le temps ^^.

    Dit moi si ça fonctionne chez toi .
    Alors, c'est quoi cette requête de fou !!!!!!!!!!
    bon la requête fonctionne au niveau phpmyadmin
    par contre cela n'affiche rien au niveau de la page php
    Y a un loup quelque part ???

  5. #25
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par armel18 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Si tu fonctionne comme ça, c'est normal de ne plus avoir les menu de base, ils n'ont pas de sous-menu, du coup tu les exclu .....
    +1
    bien vu.

    voilà encore une autre solution :
    Code php : 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
     
    <?php
    $sql="
    SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition, sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    FROM menu AS me
    LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu
    ORDER BY me.position, sme.position
    
    ";
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
     $menu=array();
     $icone=array();
        while ($row=mysql_fetch_array($req) ) {
          if(!isset($menu[$row['menom']]))
          $menu[$row['menom']] = array()  ;
          $icone[$row['menom']]= array('meurl'=>$row['meurl'],'icone'=>$row['meicon'],'smeurl'=>$row['smeurl']);
          $menu[$row['menom']][] = $row;
    }
     
     
    echo '<ul class="menu">';
    foreach ($menu as $key => $value) {
     
      if(empty($icone[$key]['smeurl'])){ //pas de sous menu
         echo "<li><a href='".$icone[$key]['meurl']."'> $key </a></li>";
     
      }else{ //création du sous menu
        echo "<li><a href='".$icone[$key]['meurl']."'> $key </a><ul>";
     
     
     
     
      foreach ($value as $k => $sm) {
                   echo '<li><a href="'.$sm['smeurl'].'">'.$sm['smenom'].'</a></li>';
      }
      echo "</ul></li>";
    }//if
        }
      echo '</ul>';
     
      ?>
    tu peux visualiser le rendu du menu sur jsffidle:menu

    ------------
    Après le menu ne change pas souvent, pour l'optimiser tu peux mettre en cache(memcache par exemple) les arrays contenant les menus pour éviter des appels sql inutiles.
    Alors pareil que la proposition de skeud,
    la requête fonctionne au niveau phpmyadmin
    par contre cela n'affiche rien au niveau de la page php???

  6. #26
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    je ne sais pas comment tu testes mon script et pourtant ça marche chez moi.
    Assures toi d'avoir les fonctions de connexion au serveur et à la bd.
    Code php : 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
     
    <?php
    mysql_connect("localhost", "mysql_user", "password") or
    die("Impossible de se connecter : " . mysql_error());
    mysql_select_db("la_bd");
     
    $sql="
    SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition, sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    FROM menu AS me
    LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu
    ORDER BY me.position, sme.position
     
    ";
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
     $menu=array();
     $icone=array();
        while ($row=mysql_fetch_array($req) ) {
          if(!isset($menu[$row['menom']]))
          $menu[$row['menom']] = array()  ;
          $icone[$row['menom']]= array('meurl'=>$row['meurl'],'icone'=>$row['meicon'],'smeurl'=>$row['smeurl']);
          $menu[$row['menom']][] = $row;
    }
     
     
    echo '<ul class="menu">';
    foreach ($menu as $key => $value) {
     
      if(empty($icone[$key]['smeurl'])){ //pas de sous menu
         echo "<li><a href='".$icone[$key]['meurl']."'> $key </a></li>";
     
      }else{ //création du sous menu
        echo "<li><a href='".$icone[$key]['meurl']."'> $key </a><ul>";
      foreach ($value as $k => $sm) {
                   echo '<li><a href="'.$sm['smeurl'].'">'.$sm['smenom'].'</a></li>';
      }
      echo "</ul></li>";
    }//if
        }
      echo '</ul>';
     
      ?>

    le rendu chez moi donne ceci:menu.

  7. #27
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    oui la je comprends pas,
    je suis bien connecter en bdd, j'ai pas d'erreur SQL, j'ai aucune erreur d'ailleurs mais rien ne s'affiche ....

    EDIT : je pense avoir trouvé c'est un souci de <ul> ouver /fermé

  8. #28
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Ok c'est bon
    ça marche avec la dernière solution armel18.
    en tout cas merci a vous trois (skeud, armel18 et rawsrc) pour le coup de main, c'est fait toujours du bien une bonne petite prise de tête en php

    Cdt
    @+

  9. #29
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Hehe concernant la requete de fou comme tu dis ^^:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (select position, url, nom, 0 as isChild from menu UNION select CONCAT((select position from menu where menu.id=smenu.idMenu), position) as position,url,nom, 1 as isChild from smenu) mymenu order by position

    On va la découper pour que tu comprennes:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select position, url, nom, 0 as isChild from menu

    ça c'est pour récupéré tout les menu

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select CONCAT((select position from menu where menu.id=smenu.idMenu), position) as position,url,nom, 1 as isChild from smenu

    La je récupère les sous-menu de manière à avoir le premier champ, une concaténation de la position du sous-menu et du menu correspondant

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select position from menu where menu.id=smenu.idMenu
    Me permet de récupéré la position du menu associé au sous-menu

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT((select position from menu where menu.id=smenu.idMenu), position)

    Permet de concaténé les deux position, ainsi si un menu est en 2 et le sous-menu en 1, la position résultante sera 21, ça permet d'effectué un tri après .

    Avec ces deux requete, je créer la table temporaire qui me servira à trier les données:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    (select position, url, nom, 0 as isChild from menu UNION select CONCAT((select position from menu where menu.id=smenu.idMenu), position) as position,url,nom, 1 as isChild from smenu) mymenu

    La table mymenu contient donc tout les menu et sous-menu avec comme premier champ les valeur du style:
    1
    2
    21
    22
    3
    31
    32
    ....
    Ensuite je sélectionne dans cette table tout, et effectue un tri sur la position pour les avoir dans l'ordre.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (....) mymenu order by position

    Voila, comme ça tu obtiens tout les menu et les sous menu .

    PS: UNION permet de joindre le résultat de deux requête dans une seule sortie, à la condition que tes deux requête retourne le même nombre de champ.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  10. #30
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    ok,
    merci pour l'explication ça me parait hyper claire c'est très sympa.
    je savais pas que l'on pouvait créer une table temporaire c'est énorme ça.

    Merci encore pour ton aide et à charge de revanche, même si je doute que je puisse d'aider en dev
    par contre si tu as des besoins en Webdesign c'est plus ma partie.

    je te place en ami si ça te dérange pas .

    Merci encore.
    @+

  11. #31
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Bah écoute si en webdesign et création de site web ça t'interesse, j'ai un petit (tout est relatif) projet qui aurait besoin d'un webmaster ^^.

    On peut en discuter par mp .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  12. #32
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    bah pourquoi pas,
    j'ai pas mal de boulot en cette rentrée mais explique moi cela par MP.
    on verra

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL] Une requete qui ne retourne aucun résultats
    Par amerex dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/01/2010, 17h46
  2. [MySQL] requete qui n'affiche rien
    Par ffred2908 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/04/2008, 15h07
  3. requete qui n'affiche pas le bon résultat
    Par imsse dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 26/02/2008, 17h46
  4. Requete qui n'affiche pas tout
    Par sebinator dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/12/2007, 17h52
  5. [Requete] qui n'affiche pas les doublons mais sur un seul champs
    Par joseph.breham dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 14h57

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