WHERE句で指定された列名にワイルドカードを含めることはできますか?何かを選択したいのですが、列の束が特定の値(この場合は1)に一致する場合に限ります。例えば:
SELECT COUNT(id) FROM records WHERE *_check = 1
接尾辞として_checkを持つ列がたくさんあるので、上記のコードに似たものを使用すると非常に便利です(これは機能しません)。
information_schemaにクエリを実行して、1つのクエリで列を取得できます
SELECT column_name FROM information_schema.columns
WHERE table_schema = 'foo'
AND table_name = 'bar'
AND column_name LIKE '%_check'
結果からクエリを作成します(擬似コード)
query = "SELECT COUNT(id) FROM records WHERE ";
foreach columName in columnNames
query = query + " " + column_name + " = 1 OR "
next
query = TrimLastOr(query);
ただし、mysql information_schemaクエリはクエリごとにディスクから読み取るため、パフォーマンスが低下するため、お勧めしません。
より良い:戻るビューを使用する
SELECT id FROM records WHERE col1_check=1 or col2_check=2 ...
そのため、ロジックで複数の場所で使用でき、別の_check
列を追加した場合にのみビューを更新する必要があります。
いいえ。
このようなことをしたい場合は、動的SQLと同等のものが必要です。