2016-04-10 15 views
2

Ich habe 2 Tabelle, game_jnship_equip_list ist Ladeneinrichtung grundlegende Informationen, game_jnship_equip ist Laden für was hat Spieler. HierLinke Verknüpfung verwenden, aber der Wert wird nicht angezeigt?

sind game_jnship_equip_list Daten:

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

Hier game_jnship_equip Daten:

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

Und ich frage, wie unten:

$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); 

Aber ich kann nur Wert erhalten, wie unten :

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

Dann über die t4 alles leer.

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

Ich mag es Wert zeigen, wie unten:

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

So wie dieses Problem beheben? und meine DB::query Funktion, kann es nicht erlauben DB::query(SELECT * FROM xxxx (SELECT * FROM)), bedeutet 2 wählen innerhalb 1 DB::query, System wird durch Sicherheitsproblem abgelehnt.

Vielen Dank.

Antwort

2

Sie können dies tun mit einer bedingten Aggregation CASE EXPRESSION statt 3 links schließt sich mit:

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

Sorry, meine 'DB :: query' Funktion ist nicht erlaubt 2' Select * from' Funktion für Sicherheitsproblem –

+0

@SweeHong Warum haben Sie es selbst benutzt? trotzdem versuche es jetzt. – sagi

1

Warum nicht eine Vereinigung?

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 

Dadurch werden Sie einen bestimmten Typ 2 bekommen und einen bestimmten Typ 1. Ich nicht die anderen Benutzer und Position Bedingungen haben hinzugefügt, aber Sie können das selbst tun.

+0

Warum würden Sie das tun? es ist das gleiche wie 1 mit 'WHERE list.type in (1,2)' auswählen. Um nicht darüber zu sprechen, dass seine Anforderung darin bestand, diese Spalten nebeneinander zu haben, nicht als separate Zeilen. – sagi

Verwandte Themen