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

 MySQL Discussion :

Ordonner l'affichage des champs !? - Pb de requête...


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Par défaut Ordonner l'affichage des champs !? - Pb de requête...
    Bonjour,

    Je débute dans la conception/gestion de bases de données, et je suis confronté à un problème :

    Soit une table comprenant les champs suivants : ID, Nom, Prenom, Adresse, Tel, Fax.

    Je souhaite afficher cette table sur mon site, avec la possibilité de faire un drag and drop sur chaque colonne afin de personnaliser l'affichage (si l'utilisateur desire que la premire colonne soit le Prenom et non le Nom par exemple...).

    Exemple ici :
    http://www.webresourcesdepot.com/wp-...querydragdrop/

    Dans cette exemple, ils font varier les lignes ce qui simplifie la conception étant donné que pour chaque entrée on peut rajouter un champ "ORDER" qui mémorise la position de la ligne.

    Ainsi pour chaque champ de la table citée ci-dessus, je souhaiterai leur attribuer une ou plusieurs variables permettant de mémoriser les préférences de l'utilisateur (Ordre des colonnes, certaines colonnes masquées ou non...).

    Quelle serait une solution à mon problème ?!

    Merci !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Fredovsky Voir le message
    Ainsi pour chaque champ de la table citée ci-dessus, je souhaiterai leur attribuer une ou plusieurs variables permettant de mémoriser les préférences de l'utilisateur (Ordre des colonnes, certaines colonnes masquées ou non...).
    Si je comprends bien votre besoin, il faut mémoriser pour chaque utilisateur :
    - la colonne X est masquée ;
    - la colonne Y apparaît en position N.

    On aurait le schéma suivant :
    Utilisateur -0,n----Préférer----0,n- Colonne
    Paramètre -0,n---------|

    Avec l'association Préférer qui serait porteuse de la valeur du paramètre pour telle colonne et pour tel utilisateur.

    Ce qui donnerait les tables suivantes :
    Utilisateur (U_Id...)
    Colonne (C_Id, C_Libelle, C_Position_Par_Defaut...)
    Paramètre (P_Id, P_Libelle...)
    Preference (Pr_Id_Utilisateur, Pr_Id_Colonne, Pr_Id_Parametre, Pr_Valeur)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Par défaut
    En fait il faudrait que chaque colonne soit une table ?!

    Soit la table NOM :
    ID_Utilisateur, Position, Masquage, Valeur

    la table PRENOM :
    ID_Utilisateur, Position, Masquage, Valeur

    la table TELEPHONE :
    ID_Utilisateur, Position, Masquage, Valeur

    Etc.. etc... ?

    Ca rendrait la chose possible, mais lors d'une requête, il faudrait lancer la recherche dans pleins de tables differentes pour obtenir une ligne complète de résultat (=nom, prenom, adresse, fax...), avec du coup une redondance de la colonne ID_Utilisateur dans chaque table.

    Est-ce ce que tu me proposais ? car en fait je n'ai pas très bien compris ta réponse.

    Merci de m'eclaircir : )

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Fredovsky Voir le message
    En fait il faudrait que chaque colonne soit une table ?!
    Meuh non !
    Est-ce ce que tu me proposais ?
    Ben non !
    car en fait je n'ai pas très bien compris ta réponse.
    Effectivement !

    Alors je répète :
    Ce qui donnerait les tables suivantes :
    Utilisateur (U_Id...)
    Colonne (C_Id, C_Libelle, C_Position_Par_Defaut...)
    Paramètre (P_Id, P_Libelle...)
    Preference (Pr_Id_Utilisateur, Pr_Id_Colonne, Pr_Id_Parametre, Pr_Valeur)
    Et voici des exemples de données :
    Dans la table Utilisateur (U_Id...), U_Id est l'identifiant de l'utilisateur. Les autres colonnes possibles telles que U_Nom, U_Prenom... on s'en fout, on n'en a pas besoin pour l'exemple. Donc U_Id va de 1 à X.

    Dans la table Colonne (C_Id, C_Libelle, C_Position_Par_Defaut...), on pourrait avoir les données suivantes :
    1, 'Nom', 1
    2, 'Prenom', 2
    3, 'Telephone', 4
    4, 'Adresse', 3
    5, 'Date de naissance', 5

    Dans la table Paramètre (P_Id, P_Libelle...), on pourrait avoir les données suivantes :
    1, 'Masquage'
    2, 'Position'

    Dans la table Preference (Pr_Id_Utilisateur, Pr_Id_Colonne, Pr_Id_Parametre, Pr_Valeur), on pourrait avoir les données suivantes :
    1, 1, 2, 2
    1, 2, 2, 1
    2, 3, 2, 3
    2, 4, 2, 4
    2, 5, 1, 1

    Ce qui veut dire que l'utilisateur n° 1 veut la colonne n° 1 ('Nom') en position 2 et la colonne n° 2 ('Prénom') en position 1.
    Et que l'utilisateur n° 2 veut inverser les colonnes 'Téléphone' et 'Adresse' et masquer la colonne 'Date de naissance'.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Par défaut
    Je n'avais effectivement rien compris !!

    Tout s'éclaire, et ta méthode est évolutive (on peut ajouter autant de colonnes que l'on souhaite, et autant de paramètres différents) !

    Donc nickel, merci, car je n'arrivais pas à visualiser la solution correctement !

    A bientôt,

    Fred

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Par défaut
    Petite question pour faire les choses proprement :

    Je souhaite faire une requête et obtenir le résultat suivant :

    COL_ID | COL_LABEL | COL_POSITION | COL_VISIBLITY
    1----------Nom-------------2---------------1
    2----------Prenom----------1---------------1
    3----------Adresse----------3--------------0
    4----------Telephone-------4---------------1

    Avec COL_POSITION ayant pour valeur soit la position par défaut si l'utilisateur n'a pas défini de préférence, soit la position enregistrée dans la table Preference si celle-ci existe.

    J'ai pensé à faire 2 requêtes, l'une pour les positions par défaut, l'autre pour les préférences, et après mixer les deux en codant un truc en PHP mais je trouve ca assez moche comme méthode.

    Alors je cherche LA requete SQL me permettant d'avoir directement ce résultat, et donc directement exploitable sur mon site sans bidouiller.

    J'ai tenté des SELECT DISTINCT, des UNION, des CASE, des AN, bref, j'ai parcouru pas mal les différents opérateurs possibles, mais rien ne m'a permis de traduire la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT C_Id, C_Libelle, C_Position, C_Visibilite
    FROM Preference si lentrée existe WHERE Pr_Id_Utilisateur = id_user
    OR
    FROM Colonne si pas de preferences,
    et donc avec les valeurs par defaut (position par defaut, et visibilité à 1).
    Une petite piste peut-être ?!

    Merci !

Discussions similaires

  1. commander l'affichage des champs d'une requête depuis un formulaire
    Par nicoosito dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 31/07/2010, 14h53
  2. affichage des champs vides
    Par nada83 dans le forum Access
    Réponses: 5
    Dernier message: 02/05/2006, 16h33
  3. Liste des champs d'une requête
    Par Virgile59 dans le forum Access
    Réponses: 4
    Dernier message: 07/02/2006, 12h46
  4. [MySQL] Affichage des résultats d'un requête
    Par wiwi dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/02/2006, 12h25
  5. Réponses: 5
    Dernier message: 08/03/2005, 14h22

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