SQLでjson状態でSELECTできませんか?
イメージは以下です。
sql
1SELECT 2 u.id, 3 u.old, 4 '[{ja:n.ja},{en:n.en}]' AS names 5FROM users u 6 LEFT JOIN names n ON n.id=u.id 7WHERE u.old > 10
目的は以下です。namesを、取得結果を用いたjsonにしたい(「n.ja」を「佐藤」にしたい)のです。
id | old | names |
---|---|---|
2 | 20 | [{ja:佐藤},{en:Satou}] |
テーブルは以下です。
sql
1CREATE TABLE users 2 (`id` int, `old` int, `name` varchar(6)) 3; 4INSERT INTO users 5 (`id`, `old`, `name`) 6VALUES 7 (1, 10, 1), 8 (2, 20, 2) 9; 10 11CREATE TABLE names 12 (`id` int, `ja` varchar(10), `en` varchar(10)) 13; 14 15INSERT INTO names 16 (`id`, `ja`, `en`) 17VALUES 18 (1, '佐藤', 'Satou'), 19 (2, '山田', 'Yamada') 20; 21
こうとか...うーん、PHPでやるしかないでしょうか。
sql
1SELECT 2 u.id, 3 u.old, 4 '[{ja:' . n.ja . '},{en:' . n.en . '}]' AS names 5FROM users u 6 LEFT JOIN names n ON n.id=u.id 7WHERE u.old > 10
DB サーバーは何か (SQL Server? MySQl? Oracle? その他?) ぐらいは書けませんか?
Oracle以外ならどれでもいいですね
最悪Oracleでもいいです、できますか?
MySQLかSQLliteなら尚よしという感じです
SQL の書き方には DB によって方言のような違いがあることを認識してますか? 全部調べて書くなんてできないので、どれか一つあなたが使いそうなものを決められませんか?
あと、あなたが質問に書いた取得結果の names は JSON として正しい形式ではないですよ。そこも見直して、上で聞いた DB は何かと合わせて質問欄を編集して書き直してください。
WHERE u.old > 10
という条件が必須なら結果的にinner joinのものしか抽出されないのでleft joinは無意味ですが、left joinにする意図は何でしょう?