/ 参照テーブルの値に基づいてテーブルを結合する - php、mysql、database、join、正規化

参照表の値に基づいてテーブルを結合する - PHP、MySQL、データベース、結合、正規化

これらのテーブルがあります ここに画像の説明を入力

与えられた post_map.tag_id="1"、取得したいのですが。 ここに画像の説明を入力

entity_typeテーブルはどのテーブルに見えるかを決定します私の主な目標は、mysqli :: multi_query()またはmysqli :: query()のいずれかの結果としてこのテーブルを取得することです。つまり、PHPがデータベースに何度も行ったり来たりすることはありません。このテーブルには多数の行が含まれている可能性があり、このテーブルを一度に取得するほうがはるかに効率的です。

これまでの私の試み:

  • JOIN句を試しましたが、JOIN句のテーブル名として以前のSELECTの行値を使用する方法がわかりません。
  • 準備済みステートメントを試しましたが、使用可能なものは何も形成できません。

回答:

回答№1は1

それはIF()とJOINによって行うことができます。私はあなたのための解決策を持っている、クエリの下に実行...

SELECT et.type,
IF(et.type="resource",r.resource_type_id,NULL) AS resource_type_id,
IF(et.type="resource",r.value,NULL) AS value,
IF(et.type="user",u.name,NULL) AS name,
IF(et.type="link",l.source,NULL) AS source,
IF(et.type="link",l.count,NULL) AS count
FROM `post_map` as pm
JOIN `entity_type` as et ON pm.entity_id = et.id
LEFT JOIN `resource` as r ON pm.entity_type_id=r.id
LEFT JOIN `user` as u ON pm.entity_type_id=u.id
LEFT JOIN `link` as l ON pm.entity_type_id=l.id
WHERE pm.tag_id="1"