2010-06-22 9 views
0

J'essaie de trouver un moyen de saisir uniquement le champ spécifique correspondant à une étape de fonctionnement d'une unité. J'ai une table avec des unités et leur fonctionnement étape, alors j'ai une autre table qui a une colonne pour chaque étape. Je veux tirer seulement la colonne qui se rapporte à l'étape actuelle de cette unité.Utilisation de la valeur d'un champ en tant que nom de colonne dans une requête

Voici ma tentative mais je n'arrive pas à trouver un moyen d'utiliser la valeur de fonctionnement comme référence. Mon problème est que j'ai besoin du champ qui correspond à la valeur de t1.operation dans la sous-requête plutôt que la valeur de t1.operation. Cela avait-il un sens?

SELECT t1.*, 
    (SELECT t1.operation 
    FROM report_tables.roc_capacity_standards As t2 
    WHERE t1.assembly=t2.part_number) As standard 
FROM report_tables.resource_transactions As t1 
WHERE t1.date BETWEEN '2010-06-01' 
        AND '2010-06-19' 
GROUP BY job, employee 
ORDER BY operation; 

Après la recherche en ligne, j'ai trouvé qu'une seule personne a dit qu'il est pas possible surtout parce que MySQL ne sais ce qu'il interroge afin de l'optimiser basée sur les indices, etc., qui a été relatifs aux noms de tables dynamiques bien donc je n'était pas sûr que c'était pareil.

qui a été trouvé ici: Reference

Répondre

0

Je crois que votre problème réside dans la conception de vos tables et pas votre requête.

Si je ne me trompe pas, vos tables ressembler à ceci:

units (unit_id, current_operation, date, ...) 
operations (unit_id, operation_1_value, operation_2_value, operation_3_value, ...) 

Ceci est une mauvaise conception car elle conduit à des problèmes tels que votre avoir maintenant.

Une meilleure conception serait

units (unit_id, *other unit specific info* ...) 
operations (operation_id, operation_name, *other general operation info*) 
unit_operation (unit_id, operation_id, *operation_results, *operation_values, *date_started, *date_ended)