前提・実現したいこと
PHPで連想配列を define して、SQLのマスタテーブルの役割として用いています。
この連想配列をもとに、SQLで select する際に変換したいです。
該当のソースコード
マスタテーブルは次のものです。
投稿タイプとして「ニュース」や「ブログ」があるという意味になります。
php
1define( 'master_types', [ 1=>'news', 2=>'blog' ] );
投稿テーブルは次のものです。
sql
1CREATE TABLE posts 2 (`ID` int, `type_id` int, `title` varchar(100), `author_id` int) 3; 4INSERT INTO posts 5 (`ID`, `type_id`, `title`, `author_id`) 6VALUES 7 (1, 2, 'ブログ1つ目', 9), 8 (2, 1, 'ニュース1つ目', 4), 9 (3, 2, 'ブログ2つ目', 2) 10; 11
そして上記投稿テーブルからPHPで select するとこう書きます。
php
1$query = " 2select 3ID 4,type_id AS type_name 5 6from 7posts;";
やりたいのは、「AS type_name」とあるように、「type_id」を「type_name」に変換することです。
つまり次の取得が目的です。
ID | type_name |
---|---|
1 | blog |
2 | news |
3 | blog |
現状
現状はSQLの変換がわからないので、
ID | type_id |
---|---|
1 | 2 |
2 | 1 |
3 | 2 |
という風にtype_idのままで取得し、その後にPHPでtype_nameへと変換している状況です。
試したこと
今回はSQL側で変換したいので以下 case when になるのかと思ったのですが、
php
1$query = " 2select 3ID 4,case when type_id=1 then 'news' when type_id=2 then 'blog' end as type_name 5 6from 7posts;";
しかし、define しているものをわざわざ then 'news' とか then 'blog' のように書かないといけません。
つまり define を変更した際に、define だけでなく、この $query をも変更しなければならず、define のメリットが活かしきれない点に不満を覚えました。
そこで何かいい方法がありそうに思って質問させて頂いた次第です。
宜しくお願い致します。
###環境
PHP 7.3
MySQL 5.5