Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 01/03/2011, 21h20   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Par défaut Soucis d'organisation de données

Bonsoir à tous,
Pour mes besoins, je souhaite réaliser un module de news pour gérer l'actualité parlementaire. Les choses au parlement sont regroupées en législature. Et dans mon cas une législature coure sur 5 ans. Et chaque année parlementaire(année d'une législature) est divisée en 3 sessions. Celle Novembre, Mars et Juin. Je souhaite donc découpé mes news par législature et session. Retrouver toutes les news d'une session par exemple celle de mars, ou bien par exemple toutes les news d'une législature. Je ne sais donc pas comment tailler ma table ou mes tables à propos. Cela me permettra aussi de classer mes textes de lois dans la même logique (législature et sessions).

Merci d'avance pour votre aide.

NB. Les choses pourront s'étaler sur plusieurs sessions.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 08h46   #2
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Il y a beaucoup de spécialiste dans ce domaine et bien que je ne le sois pas, voilà comment je ferais (ou du moins j'essayerais de faire ):

Idée 1/ Créer un ou deux champ(s) supplémentaire(s) dans la table news qui représenteraient la législature et la session. ex: 2008:2. Ce codage correspondant à une convention que tu auras définit au préalable avec les utilisateurs.

Idée 2/ Créer une table législature avec 3 champs: ID_Legislature, Legislature, Session. Cette table est liée à la table News par le champ ID_Legislature.

J'espère avoir été claire et surtout ne pas être hors sujet.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 11h44   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Citation:
Envoyé par riete Voir le message
Idée 1/ Créer un ou deux champ(s) supplémentaire(s) dans la table news qui représenteraient la législature et la session. ex: 2008:2. Ce codage correspondant à une convention que tu auras définit au préalable avec les utilisateurs.
je penche plus à cette idée mais avec trois tables :
table legislatures avec 3 champs id, annee_debut et annee_fin et comme exemple
id_legis | annee_debut | annee_fin
1 | 2003 | 2008
2 | 2008 | 2013

table sessions
id_session | mois
1 | Novembre
2 | Mars
3 | Juin

table news
id_news | id_legis | id_session | news_titre | news_texte | date_insertion

Avec cela ca marche, mais j'ai l'impression que le champs id_legis serait inutile. date_insertion étant un datetime, YEAR(date_insertion) me retourne l'année du post de la news et en comparant cette année avec annee_debut et annee_fin de chaque legislature, on peut retrouver la legisture de la news. Je souhaite donc savoir comment faire cette comparaison.
je pense être claire.

Meilleures salutations.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 15h51   #4
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Citation:
Envoyé par okoweb Voir le message
Avec cela ca marche, mais j'ai l'impression que le champs id_legis serait inutile. date_insertion étant un datetime, YEAR(date_insertion) me retourne l'année du post de la news et en comparant cette année avec annee_debut et annee_fin de chaque legislature, on peut retrouver la legisture de la news. Je souhaite donc savoir comment faire cette comparaison.
je pense être claire.

Meilleures salutations.
Eh ben, tu y es arrivé en plus c'est peut être mieux que ce que je t'ai proposé.
Par contre ton idée de supprimer id_legis n'est pas bonne à mon avis. D'une il te faut une clé primaire sur ta table (mettre annee_debut ou fin n'est pas top), deux, si tu veux que tes requêtes soient performantes, il faut mieux faire une recherche sur un champ indexé et indexer une des années sur une si petite table ?. Utilise ton temps à autre chose que d'essayer d'optimiser des choses qui n'en valent pas la peine.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 16h11   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 59
Points : 44
Points : 44
Je confirme okoweb ta solution est bien bonne pour id_legis ca dépends, je le garderais, ca
MtgCmg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 19h41   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 707
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 707
Points : 3 277
Points : 3 277
Salut

Je suis plutôt d'accord sur la structure que tu as conçue.

Mais un truc me chiffonne malgré tout, car il est dit que :
Une législature c'est 5 ans (comme 2003 - 2008)
Puis chaque année des législatures il y a 3 sessions (Novembre, Mars, Juin)
Et enfin, chaque News correspond à 1 législature, donc à 1 session.

Là je veux en venir, c'est que théoriquement, c'est les sessions (table sessions) qui sont liées directement aux législatures, or, cette structure ne le représente pas.

C'est la table "news" qui fait le lien avec les 2, ce qui est théoriquement pas vraiment la même chose.

D'ailleurs, on perçoit dans la réalité qu'il y a un phénomène de répétition :
Tous les ans il devrait avoir 3 sessions, donc 15 sessions pour chaque législature (3 x 5 ans).

Toujours théoriquement, on devrait avoir ceci :
legislatures
Code :
1
2
3
4
 
id_legis | annee_debut | annee_fin
1        | 2003           | 2008
2        | 2008           | 2013
sessions_legis
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
id_session | id_legis |libelle
1           | 1         Novembre
2           | 1         Mars
3           | 1         Juin
 
4           | 1         Novembre
5           | 1         Mars
6           | 1         Juin
 
... etc pour les 15 session de 2003-2008 ...
 
16        | 2           | Novembre
17        | 2           | Mars
18        | 2           | Juin
... etc pour les 15 session de 2008-2013 ...
Puis coté table "news", il n'y plus de "id_session", seulement "id_legis".
Coté requête, faudra faire une jointure.
new -> sessions
sessions -> legis
Encore que, si on a les 2 infos (les 2 IDs) sur le coude, et qu'on estime fiables, la jointure session/legis peut être évité.
Il me semble que c'est plutôt comme ceci d'après ce que tu as exprimé, non ?


A coté de ça, on voit bien que les sessions seront les mêmes tous les ans, qu'il est peut être peu probable que ça change (aussi bien le mois que le nombre/an), mais ça reste néanmoins basé sur une probabilité.
Encore que là, personnellement je sais vraiment pas.

Faire 3 lignes/ans, soit 15 tous les 5 ans et 30 tous les 10 ans, c'est très peu.
L'avantage, c'est qu'il est possible de rajouter autant de sessions par années en cas d'exception, de même de leur donner un libellé individualisé aussi.


Mise à part ça, ça diffère très peu.
En espérant aussi ne pas être à coté de la plaque, car les législatures, c'est franchement pas ma tasse de thé.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 17h10   #7
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
@okoweb Conserve ta structure:
table news
id_news | id_legis | id_session | news_titre | news_texte | date_insertion

Si le cycle des Sessions est toujours le même, Novembre Mars Juin, avec simplement 3 enregistrements dans la table Sessions la requête est possible. tu n'auras donc pas de problèmes à trouver une news avec ta structure.

Je ne partage pas l'avis de RunCodePhp.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 20h03   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 707
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 707
Points : 3 277
Points : 3 277
Citation:
Envoyé par riete
@okoweb Conserve ta structure:
Comment peux tu en être aussi certain que c'est la bonne ?

Pour ma part, je n'ai fais qu'une remarque sur un aspect par rapport à ce qui a été exprimé.
Personnellement, je ne m'aventurerais pas, à moins de bien maitriser le sujet (les législatures).

A coté de ça, et juste par curiosité, j'ai jeté un oeil sur un site où le déroulement des législatures étaient très variables :
Rarement les même mois, rarement le même nombre de session, etc ...
Il y aurait rien de fixe apparemment.

M'enfin, Okoweb doit le savoir mieux que nous.


Citation:
Envoyé par riete
Je ne partage pas l'avis de RunCodePhp.
Il aurait été plus intéressant de dire pourquoi, non ?

Dans l'absolu on pourrait aussi le faire en une seule et unique table, et on aura aussi aucun mal à retrouver une news, mais vraiment aucun.
Mais est ce bon pour autant ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 09h13   #9
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Citation:
Envoyé par RunCodePhp Voir le message
Comment peux tu en être aussi certain que c'est la bonne ?
Il y a bien longtemps que je ne suis plus certain de rien. Sauf de mon ignorance.
Pour le sujet qui nous intéresse, à okoweb de légiférer, c'est LA personne de la situation .
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 13h59   #10
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
Malgré mon retard, déjà mes remerciements à tous pour vos réactions.
Citation:
Envoyé par RunCodePhp Voir le message
Toujours théoriquement, on devrait avoir ceci :
...
sessions_legis
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
id_session | id_legis |libelle
1           | 1         Novembre
2           | 1         Mars
3           | 1         Juin
 
4           | 1         Novembre
5           | 1         Mars
6           | 1         Juin
 
... etc pour les 15 session de 2003-2008 ...
 
16        | 2           | Novembre
17        | 2           | Mars
18        | 2           | Juin
... etc pour les 15 session de 2008-2013 ...
Puis coté table "news", il n'y plus de "id_session", seulement "id_legis".
Coté requête, faudra faire une jointure.
new -> sessions
sessions -> legis
Cette organisation me plait beaucoup mais un autre soucis se dessine à l'horizon. Si je souhaite les news de toutes les sessions de Juin d'une législature. Quelle sera la requête? En plus l'insertion des répétions sur le libelle d'une session, des erreurs peuvent s'infiltrer. Exemple : Juin, Jiun... du coup ca devient 2 libelles distincts, et des problèmes surviennent...

Comment résoudre ce problème?

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 15h54   #11
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Citation:
Envoyé par okoweb Voir le message
En plus l'insertion des répétions sur le libelle d'une session, des erreurs peuvent s'infiltrer. Exemple : Juin, Jiun... du coup ca devient 2 libelles distincts, et des problèmes surviennent...

Comment résoudre ce problème?

Merci d'avance...
Il y a plusieurs solutions, pour ma part j'utiliserais une liste <select> avec tous les mois. De cette façon aucun risque d'erreur de saisie et tu stock le numéro du mois.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 08h11   #12
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 707
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 707
Points : 3 277
Points : 3 277
Citation:
Quelle sera la requête? En plus l'insertion des répétions sur le libelle d'une session, des erreurs peuvent s'infiltrer. Exemple : Juin, Jiun... du coup ca devient 2 libelles distincts, et des problèmes surviennent...
Il n'y a aucun problème à ce niveau, avec un GROUP BY on peu obtenir juste ce qu'il faut.

Exemples simples :
Code sql :
1
2
3
4
5
 
SELECT id_legis, libelle
FROM session_legis
WHERE id_legis = 1
GROUP BY libelle
Si tu est certain qu'il ne pourra jamais avoir plus de 3 libellés différents, rajouter un LIMIT 3 ne mange pas d'pain.
Mais dans cette exemple, même si cela est inutile, il faudrait quand même choisir une législature en particulier.


Ensuite, et bien comme le propose Riete, propose un menu déroulant (ou boutons radios, peu importe) lors d'une insertion ou modification.
En somme, on évite au maximum les saisies, pour justement éviter les erreurs de frappes.

Citation:
Si je souhaite les news de toutes les sessions de Juin d'une législature. Quelle sera la requête?
Quelque chose comme :
Code sql :
1
2
3
4
5
6
 
SELECT n.id_news, n.news_titre, n.news_texte, n.date_insertion
FROM news n
JOIN session_legis sl ON n.id_legis = sl.id_legis
WHERE id_legis = 1
AND libelle = 'juin'

A coté de ça, si dans tes spécifications les mois seront toujours les mêmes (novembre, mars, juin), il faut en être certain aussi, et bien rien empêche de le représenter dans la Bdd en créant/rajoutant ça dans une table.

table : "legis_libelle"
Code :
1
2
3
4
5
 
id_legis_libelle | libelle
3                | mars
6                | juin
11               | novembre
Par sécurité on respecterait quand même l'ordre des mois, ce qui laissera la liberté d'en rajouter au cas où.

Puis coté session_legis :
Code :
1
2
3
4
 
id_session | id_legis |id_legis_libelle
1          | 1        | 6 (6 pour Juin donc)
... etc ...
En pratique, il suffit de faire un "SELECT id_libelle, libelle FROM legis_libelle", et on obtiendra juste ce qu'il faut, et ça sans se soucier des doublons pour créer le menu déroulant par exemple.

Puis pour obtenir toutes les news d'1 législature de Juin :
Code sql :
1
2
3
4
5
6
 
SELECT n.id_news, n.news_titre, n.news_texte, n.date_insertion
FROM news n
JOIN session_legis sl ON n.id_legis = sl.id_legis
WHERE n.id_legis = 1
AND sl.id_legis_libelle = 6
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 11h25   #13
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
@RunCodePhp, @Riete : Merci à vous tous. je regarde et reviens à vous. Je pense être au bout du tunnel.

Meilleures salutations à tous.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 18h51   #14
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 707
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 707
Points : 328
Points : 328
@RunCodePhp, merci.
Précision : Les news sont liées plutôt aux sessions et non aux législatures, et les sessions aux législatures. Les jointures font le reste du sale boulot.
okoweb 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 14h52.


 
 
 
 
Partenaires

Hébergement Web