2010-03-23 3 views
4

J'exécute la requête SQL pour le serveur MySQL avecConditions d'utilisation de fichier texte dans SQL WHERE ... à l'article

... 
where name in ("term1","term2","term3") 

Je voudrais obtenir la liste des termes d'un fichier texte avec un terme par ligne. Comment puis-je faire ceci?

Et si cette liste de termes devenait importante? 10K, par exemple. Est-ce que ce sera efficace ou devrais-je utiliser une autre approche? Peut être une table temporaire et rejoindre? La base de données est en lecture seule.

+0

avez-vous php ou perl? les deux fonctionneraient bien avec ceci et une petite folie imbriquée de boucle – CheeseConQueso

+0

Perl irait bien. Souhaitez-vous montrer un exemple de code en guise de réponse? – yuk

Répondre

2

Je ne suis pas familier avec MySQL mais je vois quelque chose comme ça où vous pouvez charger un fichier texte dans une table comme vous le suggérez dans votre question: -

LOAD DATA INFILE 'file.txt' 
    INTO TABLE t1 
    (column1, column2, column3); 

puis avoir recours aux jointures pour obtenir des données.

Détails here.

+0

Je dois d'abord créer une table t1, non? Puis-je le faire, si la base de données est en lecture seule? – yuk

+0

Dans SQL Server, vous pouvez créer la table dans une base de données différente et la lire à partir de l'autre base de données (en lecture seule) à l'aide de la notation DatabaseName..TableName. Je ne suis pas très sûr si cela est possible dans MySQL. Devrait être possible là aussi. –

+0

Malheureusement, ce serveur MySQL public ne permet pas de créer une table temporaire ou une base de données. – yuk

0

Je pense que votre meilleur pari pourrait être de lire ceci dans une table/table temporaire utilisée spécifiquement pour cette recherche.

De cette façon, vous pouvez indexer la table et utiliser une jointure interne /où dans la sous-requête.

1

Généralement, l'utilisation d'une instruction WHERE ... IN devient très lente après quelques centaines/milliers de termes.

Aussi, si la table est en lecture seule, vous ne pourrez pas ajouter d'index pour la rendre plus rapide, donc, comme dit Astander, je suggérerais une table temporaire avec une jointure.

Questions connexes