簡體   English   中英

PHP + MySQL是否支持這種類型的虛擬表聯接?

[英]Does PHP+MySQL support this style of dummy table join?

我使用專有的服務器端語言,該語言位於Oracle數據庫的頂層。 使用這種語言,您可以使用虛擬表獲取填充有數據的現有記錄結構,並在與該表連接的記錄結構上運行查詢,就好像它是表一樣。

這是一個簡單的例子:

    //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是否有類似的東西? 如果是這樣,能否以某種方式將我指向包含更多信息或操作方法的鏈接。 谷歌搜索並沒有為我帶來任何好處-可能是搜索了錯誤的關鍵字。

使用臨時表:

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

文檔

可能有用的三件事:

  1. 內存表CREATE TABLE mem_t (id (int)) ENGINE=MEMORY;
  2. 臨時表( CREATE TEMPORARY TABLE temp_t (id (int));
  3. 查看

請注意,臨時表僅對當前連接可見,而視圖和內存表是共享資源(如常規表)。

還可以查看關於SO的以下相關問題:

您可以使用臨時表INSERT SELECT語法來實現它,然后在以后刪除該表-但是,這樣做並不是最好的選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM