Sélectionner tous les champs dans une requete sans les citer [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 20-01-2015 à 21:58:07
Premier avancement. J'arrive a afficher la liste des champs.
Citation : $req = "SHOW COLUMNS FROM particularite"; |
Je n'ai plus qu'a trouver comment extraire uniquement les champs contenant une valeur > 0, ET afficher la valeur du champ en question...
Edit : Ah ben en fait elle m'avance a rien cette requete vis a vis de mon membre "203"
Marsh Posté le 20-01-2015 à 22:03:10
tomware a écrit : est il possible d'afficher des champs sans connaitre leurs noms ? (dans la mesure où ils ne seront jamais écris dans la requete sql) |
Oui :
Select * |
A part ça, pourquoi refuser d'écrire le nom des colonnes dans une requête ? Si c'est par paresse, ce n'est pas un bon argument.
Si c'est pour éviter d'avoir des champs vide ou à zéro, alors il faudrait faire plusieurs tables au lieu d'une seule.
Par exemple, il y aurait les tables :
T_membre avec les colonnes id, et id_membre
T particularite avec les colonne id_particularite, libelle_particularite
T_membre_particularite avec les colonnes id_membre, id_particularite, valeur_particularite
Marsh Posté le 20-01-2015 à 22:12:13
Merci pour ta réponse Olivthill
Citation : A part ça, pourquoi refuser d'écrire le nom des colonnes dans une requête ? Si c'est par paresse, ce n'est pas un bon argument. |
Par précaution, car les particularités ne sont pas encore finies d'être écrites. Il se pourrais que j'en rajoute 10 ou 15 de plus. Et peut etre il y aura 1 ou 2 rajouts par semaine... voir même des suppressions.
Citation : T_membre avec les colonnes id, et id_membre |
Je crois que c'est ce que j'ai fait
T_membre avec les colonnes id, et id_membre : OK
T particularite avec les colonne id_particularite, libelle_particularite : OK
T_membre_particularite avec les colonnes id_membre, id_particularite, valeur_particularite : OK
J'ai bel et bien cette structure
Marsh Posté le 20-01-2015 à 23:42:17
Petite réflexion perso :
- Faire la requete SHOW COLUMNS ( http://forum.hardware.fr/hfr/Progr [...] m#t2248889 )
- Mettre les résultats dans un tableau
- Faire une requette SELECT * from particularite WHERE id = "203";
- Mettre les résultats dans un autre tableau
Et faire matcher les deux tableaux :
Requete1[0] = Requete2[0]
Requete1[1] = Requete2[1]
etc...
Ce n'est qu'une réfléxion hein
Marsh Posté le 21-01-2015 à 09:24:54
tomware a écrit : Merci pour ta réponse Olivthill
|
Dans ton premier post, on a plutôt l'impression que t'as qu'une seule table. olivthill te propose de sortir les champs "barbu", "sophistiqué" et autres particularités de la table et de faire :
- une autre table ayant la structure Id_particularité, Libelle_particularité
- une autre table permettant de lier un membre à une ou plusieurs particularités (avec, pour chaque lien, la valeur de 1 à 10). Comme ça, plus de valeur 0.
Bref, tu passerais de 1 table à 3 tables... Du coup, si t'as besoin de rajouter une particularité, c'est juste un simple enregistrement en plus dans la table T particularite (le libellé de la particularité) puis, dans T_membre_particularite, des enregistrements en plus pour lier des membres à cette nouvelle particularité. Du coup, tu résouts tous tes pbs
Marsh Posté le 21-01-2015 à 10:09:38
Oui dans le premier post je faisais justement référence a la table
T_membre_particularite avec les colonnes id_membre, id_particularite, valeur_particularite
En fait c'est la requete que je cherche pour afficher ces données.
Donc sans avoir a énumérer le nom de tous les champs dedans... car elles ne seront jamais définitives (donc ne pas a voir a modifier la requete a chaque fois)
Marsh Posté le 21-01-2015 à 10:56:59
Je comprends pas : si t'as la structure proposé par olivthill, comment peux-tu avoir la mise en forme proposée dans ton premier post
Si c'était le cas, t'aura ça comme résultat :
id_membre | id_particularité | libelle_particularite | valeur
203 | 2 | sophistiqué | 1
203 | 3 | mignon | 3
204 | 1 | barbu | 2
Du coup, si tu rajoutes une particularité, ça modifiera le contenu de tes tables mais pas leur structure ni les requêtes. Du coup, je comprends pas ton précédent post
Marsh Posté le 21-01-2015 à 10:59:09
Relit lentement ce que les gens te disent :
- Ce que tu demandes n'est pas possible en SQL pur avec une seul table (en tout cas à ma connaissance, y'a ptet moyen avec une procédure mais c'est overkill pour ton pb)
- Soit tu récupérés tout avec étoile et c'est en traitement derrière (PHP ou autre) que tu affiches ou pas tes champs (avec un foreach (row as key => value) { if (value > 0) { echo key / value } }
- Soit tu fait plusieurs tables :
. une table membres avec id_membre / nom_membre
. une table particularités avec id_particularite / nom_particularite
. une table membres_particularites avec id_membre / id_particularite / valeur
Tu pourras ensuite récupéré ta fiche membre avec une jointure entre tes 3 tables
Marsh Posté le 21-01-2015 à 12:26:08
Bonjour à tous
rufo a écrit : Je comprends pas : si t'as la structure proposé par olivthill, comment peux-tu avoir la mise en forme proposée dans ton premier post |
Voici le détail de mes 3 tables :
id_membre
id | id_look | age
203 | 65 | 20
look
id | id_membre | id_cheveux | id_particularite | id_yeux
65 | 203 | 4 | 2 | 3
une table cheveux, une table particularite, une table yeux.... voici la table paticularite
id | libelle_particulaire
1 | sophistiqué
2 | mignon
3 | barbu
mechkurt a écrit : |
Justement, par rapport a ma question de base, il me faut le nom des champs Et ces noms je ne veux pas les écrire manuellement
Après il est clair que je n'ai pas le niveau
=================================================================================================
J'ai un peu avancé dans mon probleme :
Dans un premier temps, je cherche deja a pouvoir afficher les résultats en récupérant le nom des champs via une requete.
Citation : <?php |
Ce qui affiche :
Citation : (id) : 203 (i = 0) youpi ca fonctionne ! |
Marsh Posté le 21-01-2015 à 13:41:57
Ca y est ca marche. Toujours la meme logique du dessus, mais corrigé.
Citation : $sql = 'SELECT * FROM id_look WHERE id="203"'; |
Ce qui m'affiche :
203
2
3
5
...
OK, prochaine étape, je vais faire une jointure
Marsh Posté le 21-01-2015 à 14:20:09
"une table cheveux, une table particularite, une table yeux.... voici la table paticularite "
-> Mauvaise idée
Si la liste de ces tables décrivant l'aspect d'un membre est fini (ie, tu ne rajoutera jamais de table), alors tu peux rester sur une seule table pour gérer le tout.
T_Caracteristiques a la structure suivante :
Id_caractéristique
Libelle_caracteristique
Type_Caracteristique -> un enum (ou un entier) prenant une valeur parmi la liste suivante : "cheveux", "particularité", "yeux"...
Valeur_caracteristique
id_membre -> clé étrangère provenant de la table T_membres (au demeurant, ton choix de nommer une table id_membre est pas top )
La requête suivante te permettra de récupérer toutes les infos d'un membre
Code :
|
Dans mon cas, la table look ne sert à rien car un membre à 0 ou plusieurs caractéristiques.
Si la liste des tables n'est pas finie, alors faut rajouter une table et transformer le champ Type_caracteristique en une clé étrangère id_TypeCaracteristique.
T_Caracteristiques a la structure suivante :
Id_caractéristique
Libelle_caracteristique
Valeur_caracteristique
id_TypeCaracteristique -> clé étrangère provenant de la table T_TypesCaracteristiques
id_membre -> clé étrangère provenant de la table T_Membres
T_TypesCaracteristiques a la structure suivante :
id_TypeCaracteristique
Libelle_TypeCaracteristique
Requête :
Code :
|
C'est bon là ?
Marsh Posté le 21-01-2015 à 16:23:20
Merci pour ta réponse rufo.
Vu mon faible niveau, je prends le temps de bien comprendre en relisant et je repasses
Marsh Posté le 20-01-2015 à 21:34:32
Bonjour,
Mon titre n'est pas très explicite...
J'ai une table "particularite" qui se compose de la sorte :
id | id_membre | barbu | sophistiqué | mignon | timide | badboy
1 | 203 | 0 | 1 | 3 | 0 | 0
Je voudrais construire une requête affichant uniquement les particularités qui sont différents de 0. Certaines particularités sont des sous-particularités (et donc peuvent être numérotées de 1 a 10).
En meme temps des champs seront ajoutés dans le futur depuis phpmyadmin... Donc déjà est il possible d'afficher des champs sans connaitre leurs noms ? (dans la mesure où ils ne seront jamais écris dans la requete sql)
Ainsi sur ma page je voudrais arriver à afficher :
Fiche membre 203
Sophistiqué (1)
Mignon (3)
Et pas le reste, vu qu'ils sont à zéro.
Je cherche ainsi à afficher le nom des colonnes d'une table avec leur valeur, et uniquement les champs dont la valeur est différente de zéro
Si quelqu'un a des pistes de réfléxion merci par avance
Message édité par tomware le 20-01-2015 à 21:52:04