2016-04-29 6 views
-1

Ich versuche, eine Switch-Anweisung zu einer Sammlung zu refaktorieren. Die switch-Anweisung wählt die richtige SQL-Abfrage aus, die basierend auf der switch-Bedingung ausgeführt wird.PHP-Array von SQL-Anweisungen

Die Abfragen haben alle Verkettungen innerhalb der switch-Anweisung, die in einem Array innerhalb einer Klasse nicht funktioniert. Hier ist eine Beispielabfrage ähnlich der, mit der ich es zu tun habe:

"select qqqq,wwww,eeee,rrrr,tttt, 'yyyy' as uuuu from " . CONSTANT . ".aaaa as ssss inner join ' . CONSTANT2 . '.ddddd .... etc. 

Irgendwelche Vorschläge?

EDIT

ist hier etwas in der Nähe des eigentlichen Code. Ich habe einige Änderungen für die Privatsphäre gemacht:

<?php 

Namespace Sammlungen;

Klasse ScheduleSQL {

private $sql; 

public function __construct($plant) 
{ 

    $sql = [ 
    'fgfghh' => "select fdgsgdfg, sgfdfgfg, rotary_priority,sfgfgfddg,sgfsgf, JB_ULT_CUST,jbr_status, jb_cust_want_date, routing_done, jb_date_need, js_time_ship, js_ship_via, jb_job_desc, rot.job_nbr, rot.job_plt, rot.job_type, sdfgdfgdf, js_ship_to, js_shipto_name, js_state, js_city, jbr_created as cvbvbv,xbvbvb, xbvbvb,xvbvbbcvb, vbvbvbas job_class, ruling_completed,scheduled_rule_date, converter, scenario_id, scenario_subdomain, transfer_type,transfer_job, jb_slope, jb_inch 
        from ' . DB_RASTER_LIB . 'jbraster as rot 
        inner join ' . DB_STR_LIB . '.sessions_and_jobs as str 
         on rot.job_type = str.job_type and str.jb_job = rot.job_nbr and cgc.jb_plt = rot.job_plt 
        inner join ' . DB_RASTER_LIB . '.rot_job_sp as rot_sp 
         on rot_sp.jb_job = str.jb_job and rot_sp.jb_plt = str.jb_plt and rot_sp.job_type = rot.job_type 
        left outer join ' . DB_RASTER_LIB . '.job_data as rot_jd 
         on rot_jd.job_nbr = str.jb_job and rot_jd.job_plt = str.jb_plt and rot_jd.job_type = rot.job_type 
        inner join ' . DB_STR_LIB . '.jobshp as shp 
         on str.jb_job = shp.js_job and str.jb_plt = shp.js_plt and shp.job_type = rot.job_type and shp.js_primary = 1 
        where rot.job_plt = $plant and rot.job_type <> A and (jbr_status is null or jbr_status<>99) 
        order by jb_date_need asc" 
]; 
} 

public function getSQL($type) 
{ 
    return $this->sql[$type]; 
} 

}

+0

Also sind CONSTANT und CONSTANT2 die Dinge, die innerhalb der switch-Anweisung variieren? Ist es eine benutzerdefinierte Collection-Klasse, die Sie verwenden möchten? –

+0

@ TZANΑθηνά an beiden Punkten korrekt –

+0

Bitte zeigen Sie uns, wie die benutzerdefinierte Sammlung aussieht. Ich dachte ursprünglich an ein einfaches assoziatives Array –

Antwort

0

fand ich, dass das Problem war, wie die Variable $ Pflanze in den Query-String gezogen.

Einschließlich es innerhalb der doppelten Anführungszeichen arbeitete außerhalb des Arrays - im ursprünglichen Kontext einer switch-Anweisung. Wenn sie jedoch in ein Array gezogen wird, muss die Variable außerhalb der Anführungszeichen stehen.

heißt

"query statement parts".$string."other query string parts" 

Vielen Dank an alle, die geantwortet haben.