2012-07-13 4 views
8

複数のカラムを選択しようとしていますが、すべてのカラムをデータベースから選択しようとしています。選択したい列はすべて「単語」で始まります。MySQLのカラム名のワイルドカード

だから、擬似コードで、私はこれを行うにはしたいと思います:

SELECT "word%" from searchterms where onstate = 1; 

多かれ少なかれ。私はこれを行う方法に関するドキュメントを見つけることはできません - それはMySQLで可能ですか?基本的には、単語のリストを識別子とともに単一の行に格納しようとしています。レコードをプルするときに、すべての単語をその識別子に関連付ける必要があります。すべての単語は文字列として結合され、その識別子を持つ配列/辞書の別の関数に渡されます。

私はできるだけ早くコードを保持するために、データベースの呼び出しをできるだけ多くするようにしています。

OK]をクリックして、ここに君たちのために別の質問です:

は、それらに名前「単語」の列の可変数があるように予定されています。 1行ごとに生成されたPythonクエリを使用して、各行ごとに別々のデータベース呼び出しを行うほうが速いのでしょうか、単純にSELECT *するほうが速く、必要な列だけを使用するのでしょうか? SELECT * NOT XYZと言うことは可能ですか?

+0

カラムではなくローを使用する方が簡単でしょうか? –

+0

それは問題で、データベース設計(これはこのプロジェクトでは頭痛になりました)だったかもしれませんが、それでは各単語とそれに関連する値の行が必要です。これらの言葉がすべて関連しているようにしたい。それらはAPIと同じクエリの一部になります。異なる識別子を持つその他のクエリは、異なるクエリになります。 –

+2

新しい質問がある場合は、新しい投稿を使用してください。この投稿の編集者には、他の質問をするために編集したことはもちろんですが、回答者には通知されません。 –

答えて

8

いいえ、SQLでは、このような選択を行う構文は提供されていません。

あなたはになります。は、まずa list of column namesをMySQLに問い合せ、その情報からSQLクエリを生成します。

SELECT column_name 
FROM information_schema.columns 
WHERE table_name = 'your_table' 
    AND column_name LIKE 'word%' 

列名を選択しましょう。そして、あなたはPythonで、行うことができます。

"SELECT * FROM your_table WHERE " + ' '.join(['%s = 1' % name for name in columns]) 

代わりの文字列連結を使用して、私はあなたのためのSQL生成を行う代わりにSQLAlchemyを使用することをお勧めします。

ただし、列の数を制限するだけであれば、このように動的クエリを行う必要はありません。データベースの難しい作業は行を選択することです。 10のうち5つの列、またはすべて10を送信することはほとんど違いがありません。

その場合は"SELECT * FROM ..."を使用し、Pythonを使用して結果セットから列を選んでください。

+0

実際には、使用しなければならなかった正確なリストを私に渡しませんか? –

+0

はい、最終的なSQLを構築するにはPythonを使用する必要があります。 psuedocodeクエリを実装する純粋なSQLの方法はありません。 –

1

いいえ、選択する列のリストを動的に生成することはできません。あなたの最終的な質問には、それをハードコードする必要があります。

現在のクエリは1つの列を含む結果セットを生成し、その列の値は条件を満たすすべての行の文字列"word%"になります。

+0

上記のカラム名を参照してください:http://stackoverflow.com/a/11466826/1091386 – icedwater

1

カーソルをループその後

SHOW COLUMNS IN tblname LIKE "word%" 

を使用して最初の列名のリストを生成し、SQL文が上記のクエリからすべての列を使用して生成することができます。

"SELECT {0} FROM searchterms WHERE onstate = 1".format(', '.join(columns)) 
0

これが役に立つことができます:それは直接MySQLのは不可能であるという結論にMySQL wildcard in select

ダーティな回避策として、最初のクエリ(http://dev.mysql.com/doc/refman/5.0/en/show-columns.html)でテーブルのすべての列名を取得し、その名前がパターンに一致するかどうかをPythonで比較します。その後、次のような見つかったカラム名を使ってMySQLのselect文を実行することができます:

SELECT word1, word2, word3 from searchterms where onstate = 1;