ワイルドカード列選択のための動的 SQL
質問:
データベース テーブルがあるとします。 「果物」や「野菜」など、同様の接頭辞を共有する複数の列があります。各列名を手動で指定せずに、特定の単語で始まるすべての列からデータを効率的に選択するにはどうすればよいですか?
例:
次のテーブル構造を考えてみましょう:
<code class="markdown">Foods | Fruit | Vegetable ---------------------- Apples | Banana | Carrots Pears | Grapes | Potatoes Oranges | Lemon | Tomatoes</code>
名前が「Vagitable」で始まるすべての列を選択したいとします。
答え:
SELECT などの MySQL クエリでの直接ワイルドカード置換野菜%はサポートされていません。この基準を満たすすべての列を動的に選択するには、データベース スキーマから取得した情報に基づいて SQL クエリを構築します。解決策は次のとおりです。
<code class="sql">SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'Foods' AND table_schema = 'YourDB' AND column_name LIKE 'Vegetable%'</code>
このクエリは、Foods テーブル内の「野菜」で始まるすべての列の名前を取得します。次に、この情報を使用して、目的の列からデータを選択する 2 番目のクエリを動的に構築できます。
<code class="php">$columnList = mysql_query($columnsQuery); $columnArray = array(); while ($row = mysql_fetch_assoc($columnList)) { array_push($columnArray, $row['COLUMN_NAME']); } $columns = implode(",", $columnArray); $query = "SELECT " . $columns . " FROM Foods";</code>
このクエリを実行すると、名前が " Vegetable" で始まる列からすべてのデータを取得できます。シングルパス
以上がMySQL で動的 SQL を使用して、類似したプレフィックスを持つ列からデータを選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。