2016-04-10 12 views
2

2台あり、game_jnship_equip_listは店舗基本情報です、game_jnship_equipはプレイヤーの持っているものの店舗です。ここで左結合を使用しますが、値は表示されませんか?

game_jnship_equip_listデータです:

+------+----------+--------------+------------+------------+ 
| ID | userid | itemcode  | atfigure | eposition | 
+------+----------+--------------+------------+------------+ 
| 1 | 1  | 1   | 100  | 1   | 
| 2 | 1  | 2   | 500  | 2   | 
+----------------------------------------------------------+ 

そして、私は以下のように照会:ここ

+--------+----------------+----------+----------+ 
| ID  | desc   | name  | type  | 
+--------+----------------+----------+----------+ 
| 1  | hello_weapon | weapon | 1  | 
| 2  | hello_shirt | shirt | 2  | 
| 3  | hell_weapon | Hweapon | 1  | 
+-----------------------------------------------+ 

game_jnship_equipデータである

$quequip = DB::query("SELECT t1.*,t2.name AS weaponame, t2.edesc AS weapondesc, t3.atfigure AS atkbonus, t4.name AS shirtname, t4.edesc AS shirtdesc FROM ".DB::table('game_jnship_equip')." t1 LEFT JOIN ".DB::table('game_jnship_equip_list')." t2 ON (t1.itemid = t2.id AND t1.eposition = '1') LEFT JOIN ".DB::table('game_jnship_equip')." t3 ON (t2.type = t3.eposition) LEFT JOIN ".DB::table('game_jnship_equip_list')." t4 ON (t1.itemid = t4.id AND t1.eposition = '2') WHERE t1.uid = 'userid' AND t1.status = '1'"); 
$ruequip = DB::fetch($quequip); 

しかし、私は以下のように値を得ることができます:

$ruequip['weaponame'] = weapon; 
$ruequip['weapodesc'] = hello_weapon; 
$ruequip['atkbonus'] = 100; 

t4はすべて空白です。

$ruequip['shirtname'] = ; 
$ruequip['shirtdesc'] = ; 

私はそれは以下のように値を表示したい:

$ruequip['shirtname'] = shirt; 
$ruequip['shirtdesc'] = hello_shirt; 

この問題を解決するために、どのように?私のDB::query機能は、それが許可することはできませんDB::query(SELECT * FROM xxxx (SELECT * FROM))、2選択内に1 DB::query、システムは安全性の問題で拒否されます。

ありがとうございます。あなたはCASE EXPRESSION代わりに、左3の加入を使用して、条件付き集計でこれを行うことができます

答えて

2

SELECT s.id,s.userid,s.itemcode,s.atfigure,s.eposition, 
     MAX(CASE WHEN s.eposition = 1 THEN s.desc END) as weap_desc, 
     MAX(CASE WHEN s.eposition = 1 THEN s.name END) as weap_name, 
     MAX(CASE WHEN s.eposition = 2 THEN s.desc END) as shirt_desc, 
     MAX(CASE WHEN s.eposition = 2 THEN s.name END) as shirt_name 
FROM (SELECT t.id,t.userid,t.itemcode,t.atfigure,t.eposition,t2.desc,t2.name 
     FROM ".DB::table('game_jnship_equip')." t 
     LEFT OUTER JOIN ".DB::table('game_jnship_equip_list')." t2 
     ON(t1.itemid = t2.id AND t.eposition = t2.type))s 
GROUP BY s.user_id 
+0

申し訳ありません、私の 'DB :: query'関数は安全性の問題のために2つの' select * from'関数を許可していません –

+0

@SweeHongなぜあなたはそれを自分のものでしたか?とにかく今試してみてください。 – sagi

1

なぜ労働組合?

SELECT 
    list.id as weaponid, 
    list.desc as weapondesc, 
    list.name as weaponame, 
    quip.atfigure as atkbonus 
from ".DB::table('game_jnship_equip_list')." as list 
    left join ".DB::table('game_jnship_equip')." as quip 
    on (quip.itemcode = list.id) 
Where list.type = 1 
UNION 
SELECT 
    list.id as shirtid, 
    list.desc as shirtdesc, 
    list.name as shirtname, 
    quip.atfigure as atkbonus 
from elist as list 
    left join equip as quip 
    on (quip.itemcode = list.id) 
Where list.type = 2 

これはあなたの特定のタイプ2と私は他のユーザーとの位置条件を追加していない特定のタイプ1を取得しますが、あなたは自分でそれを行うことができます。

+0

なぜこれをやるでしょうか? 1と同じです。WHERE list.type in(1,2)で選択します。彼の必要条件が、この列を互いに隣り合っていて、別々の行ではなくているという事実については話しません。 – sagi

関連する問題