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 :

Solution pour réaliser un index


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut Solution pour réaliser un index
    Bonjour à tous,
    je cherche comment réaliser un index avec php (PDO) et MySQL.

    Le projet est une page toute simple qui permettrai d'afficher :

    - Une rubrique (un thème englobant plusieurs activités) -> à condition qu'elle possède des activités
    - Pour chaque rubrique -> les activités qu'elles comportent
    - Pour chaque activité une description selon si les champs d'une table sont remplis ou non.

    Je pourrai réaliser ce code de façon bourrin mais je finirai avec 3000 lignes de code alors que j'aimerai m'entraîner à utiliser les boucles en php.
    Je ne sais pas trop qu'elle boucle utiliser, c'est pour cela que je vous demande de l'aide...

    J'hésite entre la boucle for et la boucle while, laquelle des deux me permettrait-elle de réaliser ce projet et d'afficher les rubriques tout en pouvant les traiter ?

    Ma bdd est remplie avec trois tables essentielles dans cette page :
    -> Une table contenant les rubriques avec un champ id et un libelle
    -> Une table contenant les activités avec id, libelle (des champs de description) et l'id de la rubrique et de l'association
    -> Une table association qui permet de récupérer le nom de l'association grâce à l'ID contenu dans la table activite.

    Merci d'avance SMVE

  2. #2
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    foreach ? :p
    Même une feuille de papier est plus légère si on la porte à deux.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ...Je pourrai réaliser ce code de façon bourrin...
    Commence déjà par ça... Ça t'apprendra les bases...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    Commence déjà par ça... Ça t'apprendra les bases...
    Salut, j'ai déjà fait un code similaire sur une autre page, ce code était aussi un genre d'index permettant d'avoir une liste des associations classé par lettre mais j'me suis retrouvé avec 3000 lignes de code (bon c'était vraiment la méthode super bourrin avec des copier/coller dans tous les sens au lieu d'utiliser des fonctions ) c'est pour ça que j'ai posté (pour éviter d'avoir le même tour)

    Merci jisig pour cette solution, je connaissais mais je ne pensais pas que ça serait aussi utile dans cette situation.
    La je l'utilise pour réaliser ce code, je suis à moins de 100 lignes et une bonne moitié des informations sont déjà triées.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ah ! Je viens de comprendre... (index)
    Tu ne parles pas d'un index(.php), mais d'une "liste alphabétiquement ordonnée" !...

    Bon... Alors il faut être carré dans la conception, notamment des tables SQL et des tables de jointures.
    Ensuite, les requêtes iront toutes seules... ou presque.

    1. Montre la structure de tes tables
    2. Il faut utiliser PDO
    3. Et connaitre les bases de la programmation PHP / PDO

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    C'est quand même un peu bizarre comme question : "Je vais construire un meuble, faut-il que j'utilise un tournevis cruciforme ou un tournevis plat ?" Ben ça dépend des vis.

    Dans ton cas, ça dépend de ce sur quoi tu veux boucler :
    • Un tableau indexé par nombre, ou un nombre fixe de tours à faire for
    • Un curseur, type pdo->fetch while
    • Un tableau indexé par clé foreach


    A noter que si tu dois trier des données, tu peux le faire directement dans tes requêtes
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Salut à vous deux !
    Désolé hier j'ai été un peu pris avec des modifs à réaliser sur une de mes pages.

    jreaux62, oui en effet je ne parle pas d'un index.php qui est la page mais bien d'un index -> "afin de classer des données" (ici ça ne sera pas par liste alphabétique mais par rubrique).

    Voilà la configuration de ma bdd :
    Nom : Sans titre.png
Affichages : 299
Taille : 68,3 Ko

    Dans cette page je vais avoir besoin de quatre tables : rubrique, activite, association et contact.

    Et le but de ce script est d'afficher quelque chose qui ressemblerait à ça :

    [RUBRIQUE]

    NomActivité 1 (NomAssociation 1)
    if exist
    EMAIL :
    SITEWEB :
    Contact1, Contact2, ....

    NomActivité2 (NomAssociation2)
    if les données ne sont pas vides
    EMAIL
    SiteWEB ....

    Je continue mes tests et vous tiens au courant, au passage merci Celira pour ce résumé, j'vais le garder en mémo.


    EDIT :

    Bon voilà j'ai réalisé quelques tests avec une structure avec un while permettant d'afficher les rubriques et à l'intérieur de ce while j'ai inséré un foreach permettant d'afficher le résultat de ma requête.

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?php	
    $req = $bdd->prepare('SELECT DISTINCT rubrique.LIBELLE as rubrique, rubrique.ID as rubrique_id FROM activite, rubrique WHERE activite.RUBRIQUE = rubrique.ID');
    $req->execute();
     
    // Tant qu'on a pas traité toutes les rubriques utilisées
    while($rubrique_use = $req->fetch())
    {
    	?>
    	<div class="bloc_activite">
    	<h1>
    	<?php
    	echo $rubrique_use['rubrique'];
    	?> </h1> <?php
     
    	//Récupération de certaines données 
    	$req2 = $bdd->prepare('SELECT DISTINCT activite.LIBELLE as activite, association.LIBELLE as association, activite.SITEWEB as SITEWEB, activite.EMAIL as EMAIL, activite.DESCRIPTION as DESCRIPTION, activite.TARIF_ACTIVITE as TARIF_ACTIVITE FROM activite, rubrique, association WHERE activite.RUBRIQUE = :rubrique_id AND association.ID = activite.ASSOCIATION');
     
    	$req2->bindValue(':rubrique_id', $rubrique_use['rubrique_id'], PDO::PARAM_STR);
    	$req2->execute();
    	$libelles = $req2->fetchall();
     
            // Comment afficher cette requête ??
    	$req3 = $bdd->prepare('SELECT DISTINCT contact.NOM, contact.PRENOM FROM contact, activite WHERE activite.CONTACT1 = contact.ID');
    	$req3->execute();
    	$contacts = $req3->fetchall();
     
    	foreach ($libelles as $libelle) 
    	{
    		// Affichage NOMactivité (NOM association)
    		$activite_association = $libelle['activite'] . ' (' . $libelle['association'] . ')' . '</br>';
    		echo $activite_association;
     
    		// Test SITEWEB
    		if($libelle['SITEWEB']!=NULL)
    		{
    			echo $libelle['SITEWEB'] . '</br>';
    		}
     
    		// Test EMAIL
    		if($libelle['EMAIL']!=NULL)
    		{
    			echo $libelle['EMAIL'] . '</br>';
    		}
     
    		// Test DESCRIPTION
    		if($libelle['DESCRIPTION']!=NULL && $libelle['DESCRIPTION']!=" ")
    		{
    			echo $libelle['DESCRIPTION'] . '</br>';
    		}
     
    		// Test TARIF_ACTIVITE
    		if($libelle['TARIF_ACTIVITE']!=0 && $libelle['TARIF_ACTIVITE']!=NULL)
    		{
    			echo $libelle['TARIF_ACTIVITE'] . '€ </br>';
    		}
    	echo '</br></br>';
    	}	
     
     
     
    	?>
    	</div>
    	<?php
    }
    ?>

    Je me suis servi d'une requête pour le while permettant de trier les rubriques qui sont utilisées dans les activités.
    Dans une seconde requête j'ai essayé de récupérer le maximum d'information pour les faire passer dans un foreach. Tout s'affiche bien, mais il manque les contacts que je n'ai pas réussi à caser dans le foreach et j'aimerai pouvoir les afficher aussi dans cette boucle sinon ça va tout décaler...
    J'ai préparé une requête contact mais je ne sais pas où la placer...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pas de Up sans infos supplémentaires.

    • Pose UNE question, claire, précise.
    • Explique ce que tu veux faire/obtenir.
    • Avec le code ou essais réalisés.


    Quelques infos :

    1- La préparation d'une requête ($bdd->prepare...) peut/doit se faire à l'EXTERIEUR de la boucle.
    Elle se fait une seule fois, mais peut être utilisée plusieurs fois (c'est tout l'intérêt de la préparation).

    Le passage des paramètres et l'execute se font là où c'est nécessaire (dans la boucle).

    2- 2 façons de lire/afficher des données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($rubrique_use = $req->fetch()) {
    ...
    fetch() : on récupère une ligne à la fois, qu'on liste avec while
    (à utiliser de préférence, quand on a beaucoup de lignes à récupérer)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$contacts = $req3->fetchAll();
    	foreach ($libelles as $libelle){
    ...
    fetchAll() : on récupère toutes les lignes (attention au A majuscule !) dans un array, qu'on parcourt avec foreach

    3- Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		if($libelle['SITEWEB']!=NULL)
    on peut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		if( !empty($libelle['SITEWEB']) )
    (sauf dans les cas où on peut avoir la valeur "0" (zéro). Voir : empty()


    Autre chose ?
    Dernière modification par Invité ; 19/02/2018 à 10h13.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    merci d'avoir pris le temps de m'envoyer ce petit récapitulatif.

    Tout d'abord j'ai fait en sorte d'enlever mes requêtes préparées des boucles.
    Ensuite j'ai passé ma boucle foreach en boucle while avec fetchAll() (étant donné que le while semble plus approprié pour passer beaucoup d'infos) comme ceci :

    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
     
    	while($libelle = $req2->fetch())
    	{
    		// Affichage NOM activité (NOM association)
    		$activite_association = $libelle['activite'] . ' (' . $libelle['association'] . ')' . '</br>';
    		echo $activite_association;
     
    		// Test SITEWEB
    		if($libelle['SITEWEB']!=NULL)
    		{
    			echo $libelle['SITEWEB'] . '</br>';
    		}
     
    		// Test EMAIL
    		if($libelle['EMAIL']!=NULL)
    		{
    			echo $libelle['EMAIL'] . '</br>';
    		}
     
    		// Test DESCRIPTION
    		if($libelle['DESCRIPTION']!=NULL && $libelle['DESCRIPTION']!=" ")
    		{
    			echo $libelle['DESCRIPTION'] . '</br>';
    		}
     
    		// Test TARIF_ACTIVITE
    		if($libelle['TARIF_ACTIVITE']!=0 && $libelle['TARIF_ACTIVITE']!=NULL)
    		{
    			echo 'Tarif activité : ' . $libelle['TARIF_ACTIVITE'] . '€ </br>';
    		}
     
    		// Test CONTACT
    		if($libelle['CONTACT1']!=NULL)
    		{
    			echo 'Contact 1 : ' . $libelle['CONTACT1'];
    		}
     
    		echo '</br>';
    		?>
    		</div>
    		<?php
    	}

    Le problème doit sûrement provenir de ma requête. J'ai essayé d'ajouter les contact à cette requête mais la boucle ne se répète plus...

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req2 = $bdd->prepare('SELECT DISTINCT activite.LIBELLE as activite, association.LIBELLE as association, activite.SITEWEB as SITEWEB, activite.EMAIL as EMAIL, activite.DESCRIPTION as DESCRIPTION, activite.TARIF_ACTIVITE as TARIF_ACTIVITE, contact.NOM as CONTACT1 FROM activite, rubrique, association, contact WHERE activite.RUBRIQUE = :rubrique_id AND association.ID = activite.ASSOCIATION AND contact.ID = activite.CONTACT1');

    Sachant que l'id de la rubrique est récupéré après être passé dans une première boucle while.

    Le fautif doit être le contact.ID = activite.CONTACT1 qui doit me stopper ma boucle ?

    Je met des images de la bdd:

    association :
    Nom : association.png
Affichages : 222
Taille : 10,8 Ko

    contact :
    Nom : contact.png
Affichages : 222
Taille : 21,2 Ko

    activité :
    Nom : activite.png
Affichages : 230
Taille : 35,1 Ko

    rubrique :
    Nom : rubrique.png
Affichages : 229
Taille : 10,0 Ko

    Au niveau des conditions, je mettrai plus tard des !empty quand le champ ne peux être que null ou avoir une valeur (pas =0).

    SMVE

  10. #10
    Invité
    Invité(e)
    Par défaut
    CONTACT1, CONTACT2, CONTACT3....... et quand tu voudras en mettre un 4ème, tu feras comment ?


    Il faut une table de jointure entre "contact" et "activites".
    Appelons-la.... "contact_activites" !
    Elle contiendra les ID_contact et id_activite associés

    La requête se fera alors avec :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    "...INNER JOIN contact_activites ON (contact.ID = contact_activites.ID_contact AND activites.ID = contact_activites.id_activite)..."

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    CONTACT1, CONTACT2, CONTACT3....... et quand tu voudras en mettre un 4ème, tu feras comment ?
    Bah le but est de laisser trois contacts au maximum ce qui est suffisant pour mes besoins.
    L'utilisation d'une table de jointure reste tout de même nécessaire pour ce que je veux faire ?


    Citation Envoyé par jreaux62 Voir le message
    Il faut une table de jointure entre "contact" et "activites".
    Appelons-la.... "contact_activites" !
    Elle contiendra les ID_contact et id_activite associés

    La requête se fera alors avec :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    "...INNER JOIN contact_activites ON (contact.ID = contact_activites.ID_contact AND activites.ID = contact_activites.id_activite)..."
    Dans cette table de jointure (si j'ai bien compris) je dois importer toutes les ID des contacts et leurs associés les activités à l'aide d'une requête ?
    Et ensuite je pourrais me servir de cette jointure pour récupérer les noms des contacts dans la requête en ajoutant le INNER JOINT ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    C'est bien ça.

    Pour info : actuellement, pour savoir s'il existe un contact (ou plusieurs) pour une activité, tu doit vérifier dans les TROIS colonnes CONTACT1, CONTACT2, CONTACT3.

    Avec la table de jointure, il suffit de compter les "joitures".
    Et tu peux avoir autant de contacts que tu veux (0,1,...,10) pour une même activité.

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le 2e effet bonus de la (très bonne) suggestion de notre ami tâcheté est que tu peux partager un même contact entre plusieurs activités
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Celira Voir le message
    Le 2e effet bonus de la (très bonne) suggestion de notre ami tâcheté est que tu peux partager un même contact entre plusieurs activités
    Si je ne dis pas de bêtise auparavant c'était possible aussi, on pouvait avoir plusieurs fois la même ID du contact sur différentes d'activités.


    Alors après plusieurs essais j'ai réussi à créer la table et à lui importer les données de façon automatique.
    Maintenant je suis plutôt en galère au niveau de la requête sql final.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT activite.LIBELLE as activite, association.LIBELLE as association, activite.SITEWEB as SITEWEB, activite.EMAIL as EMAIL, activite.DESCRIPTION as DESCRIPTION, activite.TARIF_ACTIVITE as TARIF_ACTIVITE, contact.NOM as contact1
    FROM (activite, rubrique, association, contact) 
    INNER JOIN contact_activites ON (contact.ID = contact_activites.ID_CONTACT AND activite.ID = contact_activites.ID_ACTIVITE_ASSOCIE)
    WHERE activite.RUBRIQUE = 2 
    AND association.ID = activite.ASSOCIATION

    Avec cette requête je n'obtiens uniquement que la première ligne des résultats.
    J'ai appelé ma nouvelle table : contact_activites et ses deux champs : ID_CONTACT et ID_ACTIVITE_ASSOCIE

  15. #15
    Invité
    Invité(e)
    Par défaut
    Attention : INNER JOIN contact_activites ne donnera des résultats QEU s'il y a effectivement des joints enregistrés.

    Pour prendre aussi en compte les activités qui n'ont pas de contact, il faut utiliser : LEFT JOIN contact_activites

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Merci pourtant j'ai lu la doc mais ça m'a échappé, j'ai changé le INNER JOIN en LEFT JOIN.

    On a donc la requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT activite.LIBELLE as activite, association.LIBELLE as association, activite.SITEWEB as SITEWEB, activite.EMAIL as EMAIL, activite.DESCRIPTION as DESCRIPTION, activite.TARIF_ACTIVITE as TARIF_ACTIVITE FROM (activite, rubrique, association, contact) LEFT JOIN contact_activites ON (contact.ID = contact_activites.ID_CONTACT AND activite.ID = contact_activites.ID_ACTIVITE_ASSOCIE) WHERE activite.RUBRIQUE = 2 AND association.ID = activite.ASSOCIATION

    Cette requête récupère les données selon la rubrique actuellement (ici 2). Par contre, je n'arrive pas à afficher les contacts, lorsque je fais un contact.NOM dans le select j'obtiens une liste qui se répète et le contact ne peut pas rester NULL apparemment.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    activite.LIBELLE as activite, association.LIBELLE as association, 
    activite.SITEWEB as SITEWEB, activite.EMAIL as EMAIL
    Sois plus cohérent dans le nommage des alias...
    On peut aussi mettre des alias aux noms des tables. Ca rend la requête plus courte et plus lisible.

    2-
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM (activite, rubrique, association, contact)
    Non. Là aussi il faut utiliser des INNER JOIN.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FROM activite ACT
    INNER JOIN rubrique RUB ON ...
    INNER JOIN association ASS ON  ...
    INNER JOIN contact CON ON ...

    3- Ecris la requête sur plusieurs lignes : elles sera plus lisible et facile à comprendre

    Enfin : passe ta requête directement dans phpmyAdmin pour voir si elle fonctionne et ce qu'elle renvoie comme résultat.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT DISTINCT activite.LIBELLE, association.LIBELLE, activite.SITEWEB, activite.EMAIL, activite.DESCRIPTION, activite.TARIF_ACTIVITE
    FROM activite
    INNER JOIN association ON (activite.ASSOCIATION = association.ID)
    INNER JOIN rubrique ON (activite.RUBRIQUE = rubrique.ID)
    INNER JOIN contact
    LEFT JOIN contact_activites ON (contact.ID = contact_activites.ID_CONTACT AND activite.ID = contact_activites.ID_ACTIVITE_ASSOCIE) 
    WHERE activite.RUBRIQUE = 2


    Le code me renvoi bien les informations sur PhpMyAdmin sans doublon sauf les contacts (ils ne sont pas sélectionnés dans le SELECT). Lorsque je fais un SELECT contact.NOM ça me bloque puisque les résultats sont en plusieurs fois...
    J'ai supprimé les alias pour plus de lisibilité le temps des tests.

    PS : J'ai mis INNER JOIN contact uniquement parce que j'pensais relier la table contact à contact_activites mais cette table n'est pas encore déclarée à ce moment là du code et il faut que la table contact soit prise en compte pour la déclarer.

    Je ne vois toujours pas comment je peux récupérer le nom des contacts

  19. #19
    Invité
    Invité(e)
    Par défaut
    "INNER JOIN contact...." sans "ON..." ça ne risque pas de fonctionner !

    ...cette table n'est pas encore déclarée...
    Elle ne va pas se créer toute seule !


    A un moment donné, il faut arrêter de jouer aux apprenti-sorciers !
    Il n'y a rien de magique ici !


    Si je reprends l'exemple montré :
    • table contact_activites : ID_CONTACT / ID_ACTIVITE_ASSOCIE
    • Tu dois avoir au moins une ligne avec : 5 / 1

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 65
    Points : 31
    Points
    31
    Par défaut
    Bizarrement chez moi ça ne met pas d'erreur sans le ON :
    Nom : requête sql.png
Affichages : 217
Taille : 42,2 Ko

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. Réponses: 3
    Dernier message: 12/11/2012, 11h33
  3. Réponses: 12
    Dernier message: 12/10/2009, 14h21
  4. Réponses: 21
    Dernier message: 30/08/2004, 17h07
  5. [Kylix] solution pour kylix3 OE BCB sous mdk 9.2
    Par raggadoll dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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