0
votes

Quelle est la meilleure façon d'écrire une requête pour afficher la liste des personnes allant à un événement spécifié?

Je ne suis pas habitué à des tables SQL avec une colonne de nom de champ et d'une pour champ de terrain, alors j'aimerais connaître la meilleure requête pour résoudre mon problème.

Ma table a une colonne pour identifiant, nom de terrain et workvalue : P>

ID FieldName FieldValue
1  FName     John
2  LName     Smith
3  Email     JSmith@gmail.com
4  event_0   Movies
5  event_1   Dinner
6  FName     Mike
7  LName     Jones
...


13 commentaires

Êtes-vous en mesure de fournir des données d'exemple et de ce que vous avez essayé jusqu'à présent? De plus, quelle plate-forme parlez-vous (par exemple MySQL, PostgreSQL, autre chose)? Veuillez vous reporter à Comment demander et Comment créer un exemple de reproductible minimal


Je le fais dans SQL Server Management Jusk SQL Code. Et je ne sais même pas vraiment où commencer parce que je ne suis pas sûr la meilleure façon de trouver un événement dans une colonne


Donc, si vous avez une autre personne, FNAME est BOB et que vous avez Event_0, c'est des films, comment savez-vous que ce film est pour Bob pas pour John?


Pensez-vous que cela causerait un problème? Cela signifie simplement qu'ils se connectent pour le même événement.


Où est Mike Jones? Comment savons-nous cela?


Je veux dire tout son aléatoire, si vous supposez des films, c'est bien comme exemple


Pouvez-vous modifier votre question et montrer un exemple de résultat de ce que vous voulez réaliser?


Certains ont seulement des films, certains ont seulement dîné, et certains ont les deux


Il n'y a pas d'entité ici; seulement un "attribut" et une "valeur". Peut-être qu'une entité peut être déduite de l'ID et de l'occurrence ultérieure d'un attribut, mais cela semble inutilement compliqué. Y a-t-il un attribut qui est commun à tous les participants


Je suis d'accord sur la fraise, mais malheureusement, ce n'est pas mon travail de changer de structure, faites simplement les requêtes


Je pense que c'est une occasion où vous allez avoir besoin d'un curseur ou de 2.


Vous avez mentionné SQL Server Management (Studio?) - Ce qui me fait penser qu'il s'agit d'une question SQLServer.


Les différents enregistrements sont-ils toujours commandés de la même manière? Je veux dire, tous les enregistrements «événement» appartiennent à la personne correspondant à l'identifiant le plus élevé, inférieur à celui de l'événement lui-même?


4 Réponses :


0
votes

Votre table ressemble à une table que j'ai dû faire face dans le passé, le client avait une table avec des colonnes comme enregistrements au lieu de lignes afin de personnaliser les champs sous un formulaire (une colonne pour chaque nom de champ et une colonne pour ses valeurs).

La façon dont j'ai traité c'était: - Faire une table de pivot à l'aide du cas où pour chaque rangée ...

Je vais vous expliquer comment avec un code dans quelques heures


1 commentaires

D'accord merci! J'attendrai avec impatience!



0
votes

J'espère que cela pourrait résoudre votre première requête où vous pouvez vérifier combien de personnes vont pour des films ainsi que d'autres événements également.

SELECT COUNT(ID), FieldValue
FROM table_name
GROUP BY FieldValue;


0 commentaires

0
votes

Voici quelque chose à penser ... une solution exclusivement pour les versions de MySQL avant 8,0.

Ceci est absolument dépendant des coordonnées de contact précisant des événements précédents. xxx


0 commentaires

0
votes

Votre modèle de données est cassé. Vous n'avez pas de moyen simple de déterminer quelles lignes sont attribuées à la même "personne" ou à "entité". Vous devriez avoir une autre colonne. N'oubliez pas que les tables SQL représentent des ensembles non ordonnés em>, de sorte que la commande des lignes n'est pas un moyen valide d'identifier quelque chose.

Si vous voulez un nombre de personnes qui vont au cinéma, que diriez-vous: P >

select count(*)
from t
where fieldname in ('event_0', 'event_1', 'event_2') and
      fieldvalue = 'Movies';


0 commentaires