2012-07-18 25 views
2

我使用作爲Oracle數據庫頂層的專有服務器端語言。使用這種語言,您可以使用虛擬表來獲取充滿數據的現有記錄結構,並在與該表結合的記錄結構上運行查詢。PHP + MySQL支持這種樣式的虛擬表連接嗎?

這裏有一個簡單的例子:

//DECLARE THE RECORD STRUCTURE 
    record data_out (
     1 prsnl [*] 
      2 person_id = f8 
      2 full_name = vc 
      2 position = vc 
      2 status = vc 
      2 last_access_dt_tm = vc 
      2 role [*] 
       3 role_name = vc 
       3 role_id = f8 
    ) with persistscript 

    //QUERY PEOPLE 
    select into "NL:" 
    from person p 
    where p.whatever_field = "QUALIFIER" 
    detail 

     a = a + 1 
     stat = alterlist(data_out->prsnl, a) 

     data_out->prsnl[a]->person_id = p.person_id 
     data_out->prsnl[a]->full_name = p.name_full_formatted 
     data_out->prsnl[a]->position = p.position 

    with time=10 

    //USE A DUMMY TABLE TO PULL IN MORE DATA FOR EACH PERSON 
    select into "NL:" 
    from (dumt d with seq = size(data_out->prsnl,5)) 
     ,rnd_role_def rrd 
     ,rnd_r_assign_hx rah 
    plan d 
    join rah 
     where rah.team_id = data_in->team_id 
     and rah.prsnl_id = data_out->prsnl[d.seq]->person_id 
     and rah.handoff_dt_tm > cnvtdatetime(curdate-90,curtime) 
    join rrd 
     where rrd.role_id = rah.role_id 
    order by d.seq, rrd.role_name 
    head d.seq 
     i = 0 
    head rrd.role_name 
     i = i + 1 
     stat = altlist(data_out->prsnl[d.seq]->role, i) 

     data_out->prsnl[d.seq]->role[i]->role_id = rrd.role_id 
     data_out->prsnl[d.seq]->role[i]->role_name = rrd.role_name 

    with time=10 

不PHP + MySQL的有這樣的事?如果是這樣,可以以某種方式指向我的鏈接與更多的信息或如何做。谷歌搜索沒有爲我提供任何東西 - 可能是搜索錯誤的關鍵字。

回答

2

使用臨時表:

CREATE TEMPORARY TABLE temp1 

的臨時表將通過當前的會話持續。您可以通過正常CREATE TABLE語法定義一個臨時表中的字段:

CREATE TEMPORARY TABLE temp1(
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(50), 
) 

...或者你可以創建一個臨時表,並允許查詢數據定義列:

CREATE TEMPORARY TABLE temp1; 
INSERT INTO temp1 
    SELECT id, name FROM normal_table 

文檔

0

可以使用temporary tablesINSERT SELECT語法來實現它,後來刪除表 - 但它不會是最好的性能

+1

臨時表是不是性能責任。如果你在每個請求中運行臨時表,當然。但是,正確使用臨時表可以提高**性能。 – 2012-07-18 18:06:07