2017-12-14 26 views
0

PHPを使用してMYSQLステートメントのヘルプが必要です。接頭辞の値に基づいてテーブルからプル

私は以下の表を持っている:

Table: app_main 
Columns: id, eid 

Table: app_equipment 
Columns: id, name 

Table: app_locations 
Columns: id, name 

app_mainの「EID」に格納された値は、接頭辞「E_」で始まるテーブルを開始した場合、私はIDと名前から引くことにしたいですapp_equipmentテーブルapp_mainテーブルの 'eid'に格納され、接頭辞 'l_'で始まる値の場合、app_locationsテーブルからIDと名前を取得します。私はこれを行うにはPHPで1つのmysqlステートメントを記述する方法を把握しようとしています。

MySql Database Schema

だから、結果は次のようになります。 機器1 場所2 場所3

+0

データベースのスキーマが非常に悪いですが、変更できません。 –

+0

@JeanDoux:これは必ずしも非常に悪いスキーマの例ではありません...他の選択肢は可能ですか?確かに。それらの代替案は、ユースケースをより良く適合させるか?必ずしも。 – spencer7593

+0

情報を更新しました – Robert

答えて

0

1つの方法は、2つのSELECTを使用することとUNION ALLセット演算子で結果を結合します。

仕様が完全には明らかではありません

しかし、我々はこのような何か行うことができます(例えば、データと予想される出力が要件を示すに向けての長い道を行くだろう。):それはないかもしれ

SELECT ee.id 
    , ee.name 
    FROM app_main em 
    JOIN app_equipment ee 
    ON ee.id = em.id 
WHERE em.e_id LIKE 'e\_%' ESCAPE '\\' 

UNION ALL 

SELECT ll.id 
    , ll.name 
    FROM app_main lm 
    JOIN app_location ll 
    ON ll.id = lm.id 
WHERE lm.e_id LIKE 'l\_%' ESCAPE '\\' 

を最良のアプローチであること。同等の結果を返す他の選択肢があります。より明確な仕様がなければ、返されるはずのものを推測しているだけです。

集合演算子は、各SELECTが同じ数の列を返し、列のデータ型が同じであることが必要です。 app_equipmentテーブルのidnameの列定義がapp_locationテーブルと異なる場合は、クエリを調整して機能させる必要があります。

+0

情報を更新しました – Robert

+0

WHERE句の条件が 'id LIKE'から' e_id LIKE'に変更されたので、回答のSQLを変更しました。 – spencer7593

関連する問題