状況
・ユーザ一覧できるテーブル(user_table)がある。(taro, jiro...)
・ユーザ毎にテーブル($username)がある。(username: "taro" が持つ固有テーブル名が "taro"、jiroくんはjiroテーブルを持っている)
やりたいこと
・ユーザ一覧から、条件一致するユーザを抽出(これはできる)
・抽出した値を変数に代入して動的なSQL文を扱う(SET句もしくはINTO句で実現する)
・抽出した値を複数の変数に代入して動的なSQL文を扱う(INTO句で実現する)
・抽出した値群を利用してSQL文を実行する(IN句でできそうな気がする、できない気もする)
SELECT username FROM userboard WHERE username IN (SELECT username FROM userboard)' # テストとして同じテーブルから参照してる
・抽出した値をテーブル名として扱う(できてない => 文字列として扱ってCONCAT? )
https://gene.hatenablog.com/entry/20100608/1275994173
・抽出した値群をテーブル名として扱う(できてない)
・抽出した複数の値群をペアで扱う(できてない)
適当にfor文を使えば実装できる。
けど、これらはSQL文でできないのかな。
たぶん概念的には、
> SELECT username, user_id FROM user_table WHERE XXXXX;
で得られた結果 @users(user1, user2...), @user_id(uid1, uid2...)を用いて、
> SELECT another_id, address FROM @users(user1) WHERE @user_id(uid1) = another_id;
をやりたいはず(?)
得られる結果は、
+==================+
| another_id1 | address1 |
+----------------------------+
| another_id2 | address2 |
+----------------------------+
:
:
だと思う。
理屈的にはできると思うんだけど、MySQLでは動的なテーブルの指定が公に許可されていないっぽい? できない。
keyword: dynamic table name, dynamic column name, prepared statement
コメント
コメントを投稿