2010-05-30 11 views
1

J'ai une table dans une base de données MySQL. On me donne une valeur qui se produit en tant que valeur de cellule dans cette table mais je ne sais pas quelle cellule est-elle, c'est-à-dire la ligne et la colonne de cette cellule. Quel est le moyen le plus efficace pour trouver la colonne à laquelle appartient cette valeur? Merci d'avance.Rechercher une colonne contenant une valeur donnée dans MySQL

Exemple:

Column_1 | Column_2 | Column_3 
1  | 2  | 3 
4  | 5  | 6 
7  | 8  | 9 

Maintenant, je me donne une valeur d'entrée de "8". Je veux savoir s'il existe un moyen efficace de découvrir que la valeur de "8" appartient à Column_2.

+0

La structure de la table continuera de changer la plupart du temps dans mon cas. Nous pouvons donc supposer que nous avons accès à toute la table avec les noms de colonnes et que nous tapons avec des requêtes MySQL. –

+0

J'ai ajouté un exemple. –

Répondre

1

Il est un peu étrange que vous ne sachiez pas dans quelle colonne se trouvent les données, puisque les colonnes sont censées avoir une fonction bien définie.

[réponse originale frotté.]

EDIT: votre mise à jour après demande juste pour la colonne. Dans ce cas, vous n'avez pas besoin de la vue, et pouvez simplement exécuter cette requête

SELECT col FROM (
    SELECT "Column_1" AS col, Column_1 AS value FROM YourTable 
    UNION ALL SELECT "Column_2", Column_2 FROM YourTable 
    UNION ALL SELECT "Column_3", Column_3 FROM YourTable 
) allValues 
WHERE value=8; 

Lorsque vous exécutez cette requête sur votre table, il retournera « Column_2 »

+0

Salut, s'il vous plaît voir mon post mis à jour. – mdma

+0

Wow, votre solution semble être vraiment bonne. Cela a fonctionné facilement avec ma première table. Laissez-moi essayer avec d'autres tables, et je reviendrai à vous. Merci! –

+0

La raison pour laquelle je ne connais pas les fonctions parmi les colonnes est que les tables sont créées manuellement par un utilisateur dans une table vide. L'utilisateur ne spécifie pas les fonctions, il écrit simplement les données dans la table et les enregistre. –

0

Sans en savoir plus sur votre application , vous avez plusieurs options:

  • Utilisez la recherche de texte intégral de MySQL. Vous pouvez vérifier la fonction MATCH dans la documentation MySQL.
  • En fonction des besoins de votre application, vous pouvez décider d'indexer toute votre table avec un index externe de recherche de texte intégral, comme Solr ou Sphynx. Cela fournit un temps de réponse instantané, mais vous devez garder l'index à jour.
  • Vous pouvez parcourir toutes les colonnes de la table faire une requête comme dans MySQL (très coûteux en temps CPU et)
+0

Je ne sais pas comment utiliser la fonction de correspondance pour obtenir la colonne exacte à laquelle elle appartient. –

0

Vous concevez cette table avec groupes répétitifs qui ne satisfait pas First Normal Form .

Vous devez créer une deuxième table et stocker les valeurs de colonne1, colonne2 et colonne2 dans une seule colonne, sur trois lignes.

Renseignez-vous sur les règles de database normalization pour plus de détails.

+0

La raison pour laquelle je n'ai pas de tables normalisées est que les tables sont créées manuellement par un utilisateur qui écrit des données dans des cellules d'une table vide. L'utilisateur ne spécifie pas les fonctions, il écrit simplement les données dans la table et les enregistre. C'est une partie de notre projet de recherche où nous essayons ensuite d'inférer les fonctions qui peuvent exister entre la colonne et normaliser les tables. –

+1

Je peux prédire la conclusion de votre recherche: * laisser l'utilisateur entrer les données d'approvisionnement, mais pas de code * (DDL compte comme code). –

Questions connexes