Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2011, 08h53   #1
Invité de passage
 
Inscription : juin 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 7
Points : 2
Points : 2
Par défaut Requête compliquée, IS NOT NULL entre deux tables

Bonjour,

Alors voici mon problème :

J'ai deux tables dans une base de données pour gérer un menu avec possibilité de sous menu au survol. MAIS, mon problème est que lorsqu'il n'y a pas de sous menu, ma div qui récupère le sous menu s'affiche vide dans ma page.

Je cherche à afficher le titre et le lien du menu principal, puis sous_titre1, lien_sous_titre_1, sous_titre_2, lien_sous_titre_2 SEULEMENT si ce n'est pas vide, le tout avec une requête de jointure, mais ça marche pas, je ne trouve pas comment écrire cette requête... Je ne sais même pas si on peut le faire...

J'ai besoin de votre aide.

Je vous ai joint une capture écran des deux tables :

sous_menu :

sous_menu.jpg


menu :

menu.jpg

ma requête pour le moment est celle-ci :

Code :
1
2
3
SELECT titre,lien,sous_titre_1,lien_sous_titre_1,sous_titre_2,lien_sous_titre_2 
FROM `menu` 
LEFT JOIN `sous_menu` ON menu.categorie = sous_menu.categorie_sous_menu
mais ça affiche quelque chose lorsqu'il n'y a pas de sous_titre au titre principal comme je vous expliquais. (voir pièces jointes)

avec sous_titre :
avec_sous_titre.jpg

pas de sous titre :
pas_de_sous_titre.jpg



merci pour votre aide !
karinemariejeanne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 09h38   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 026
Points : 18 317
Points : 18 317
Envoyer un message via MSN à CinePhil
Ta requête est bonne. C'est à l'application de gérer l'affichage ou pas selon la présence d'un NULL dans le jeu de résultats de la requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 10h56   #3
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Utilisez une jointure interne (INNER JOIN plutot que LEFT JOIN).

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 11h00   #4
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
il faut que tu gères le cas de null dans ta requête ou bien dans ton application
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 11h26   #5
Invité de passage
 
Inscription : juin 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 7
Points : 2
Points : 2
y'a un dev du tchat de ce site qui m'a aidé (MERCI TOINE) , voici le code qui marche, mais a optimiser :




Code :
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
<div id="menu"> 
    <ul class="menu"> 
<?php 
 
$resultat = affichage_menu();  
while($info = mysql_fetch_assoc($resultat)) // faire une boucle de $info tant qu'il y en a dans la variable $resultat SE RENSEIGNER SUR MYSQL_FETCH_ASSOC  
{ 
    echo '
        <li>
            <a href="'.$info['lien'].'" class="parent"><span>'. $info['titre'].'</span></a>';
 
            if($info['lien_sous_titre_1'] || !empty($info['lien_sous_titre_1'])) {
    echo '        
            <div>
                <ul> 
                    <li><a href="'.$info['lien_sous_titre_1'].'" class="parent"><span>'.$info['sous_titre_1'].'</span></a></li>';
            }
            if($info['lien_sous_titre_2'] || !empty($info['lien_sous_titre_2'])) {
    echo '          <li><a href="'.$info['lien_sous_titre_2'].'" class="parent"><span>'.$info['sous_titre_2'].'</span></a></li>';
            }
            if($info['lien_sous_titre_1'] || !empty($info['lien_sous_titre_1'])) {
    echo '      </ul>
            </div> ';
            }
    echo '        
        </li>
    ';
 
} ?>
    </ul>
</div>
karinemariejeanne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h32.


 
 
 
 
Partenaires

Hébergement Web