PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 20-08-2014 14:52:12

debe
Membre
Inscription : 25-06-2009
Messages : 87

ressortir une seule fois un champ avec jointure

Bonjour,
je n'arrive pas à bien formuler mon problème et donc a trouver des solutions sur internet.

J'ai deux tables
* une avec les types de documents (administratifs, fiches inscription, flyers ...)
* l'autre avec les documents PDF et le champ id_type

il peut y avoir plusieurs PDF avec un seul type.

je sais faire les requetes avec INNER JOIN mais il va ma ressortir à l'affichage

administratif
statuts de l'asso
adminstratif
autorisation xxx
administratif
demande de remboursement

etc...

or, je voudrais ne ressortir qu'une seule fois le champs type de la table secteur
par exemple
administratif
statuts de l'asso
autorisation xxx
demande de remboursement

Suis-je assez clair ?
j'ai tenté
SELECT DISTINCT secteur.secteur AS secteur, documents.nom AS nom
FROM secteur INNER JOIN documents
ON secteur.id_secteur = documents.id_secteur
ORDER BY secteur.secteur DESC

mais cela ne fonctionne pas

Hors ligne

#2 20-08-2014 15:45:37

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : ressortir une seule fois un champ avec jointure

Rien de plus normal car SQL applique le DISTINCT sur l'ensemble du n-uplet {secteur.secteur, documents.nom}.
Si tu ramènes ta requête à:

SELECT DISTINCT secteur.secteur AS secteur
FROM secteur INNER JOIN documents
ON secteur.id_secteur = documents.id_secteur
ORDER BY secteur.secteur DESC

les doublons vont disparaître.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 20-08-2014 15:51:51

debe
Membre
Inscription : 25-06-2009
Messages : 87

Re : ressortir une seule fois un champ avec jointure

ok, mais la, je ne récupère plus les documents.nom (et encore, il me faut aussi documents.id_doc + documents.presentation)

donc je vais bien afficher mes secteurs en titre, mais je n'aurais rien dessous ?

Hors ligne

#4 20-08-2014 16:45:09

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : ressortir une seule fois un champ avec jointure

Alors dans ce cas, SQL ne peut rien pour toi, c'est en PHP que, lors du parcours du résultat, il te faudra faire une gestion en rupture sur le changement de  secteur.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 21-08-2014 07:12:27

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : ressortir une seule fois un champ avec jointure

Bonjour,

Pourrais-tu nous faire un copier coller d'un show create table de chacune de tes tables concernées avec un jeu de données pour chacune d'elles afin que l'on puisse faire une idée plus précise de ce que tu as fais?
Ensuite essaye de nous présenter une vue graphique de comment tu souhaiterais voir afficher les informations concernées.
A défaut de bien expliquer ton besoin, je pense qu'ainsi on devrait arriver à pouvoir mieux comprendre ton besoin et ta problématique.

Merci.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#6 22-08-2014 14:46:36

debe
Membre
Inscription : 25-06-2009
Messages : 87

Re : ressortir une seule fois un champ avec jointure

je vais essayer d'éclaicir :

une table


CREATE TABLE IF NOT EXISTS `type` (
`id_type` int(10) UNSIGNED NOT NULL,
  `type` varchar(150) NOT NULL
)
 
INSERT INTO `type` (`id_type`, `type`) VALUES
(1, 'Fiches d''inscription'),
(2, 'Les projets'),
(3, 'Vie associative'),
(4, 'Administratif'),
(5, 'Plaquette annuelle');
 

une deuxième table

CREATE TABLE IF NOT EXISTS `documents` (
`id_doc` int(10) UNSIGNED NOT NULL,
  `nom` varchar(200) NOT NULL,
  `id_type` tinyint(3) UNSIGNED NOT NULL,
  `nom_pdf` varchar(150) NOT NULL
)
 
INSERT INTO `documents` (`id_doc`, `nom`, `id_type`, `nom_pdf`) VALUES
(1, 'projet enfance', 3, 'mjc-enfance.pdf'),
(2, 'projet associatif', 3, 'mjc-1.pdf'),
(3, 'stut', 4, 'stat.pdf');

le rendu voulu :
vie associative :
[*]    projet enfance
    projet associatif[/*]


administratif :
    [*]statuts[/*]



Pour l'instant, ce que j'arrive a faire, c'est, avec inner join
vie associative :
    [*]projet enfance[/*]

vie associative :
    [*]projet associatif[/*]

administratif :
    [*]statuts[/*]

(le "titre" est répété à chaque fois, et je ne voudrais l'avoir qu'une seule fois

Hors ligne

#7 07-09-2014 04:59:42

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : ressortir une seule fois un champ avec jointure

Bonjour,

Pour votre rendu souhaité, vous devez filtrer l'affichage de votre type au niveau de PHP du genre:


$count=count($rows);$type='';
for($a=0;$a<$count;$a++){
    if ($type !== $rows['type']){ $type=$rows['type']; print "<br><b>$type</b><br>";}
    // code d'affichage existant
}
 

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums