它確實「有效」,但沒有給出預期結果。
我創建了一個索引表,一個文本表和一個nums表 - 後者2具有相同的字段名稱。
然後我創建了2個索引記錄,一個用於訪問文本表中的記錄,另一個用於訪問nums表中的記錄。 (在文本和NUMS創建一個記錄)
然後,我跑到下面的SQL:
選擇test_index
。 test_id
,test_index
。datatype
,test_index
。 externalrecid
,test_index
。 something
,test_nums
。 rec_id
,test_nums
。 datatype
,test_nums
。 value1
,test_nums
。 valu2
,test_text
。 rec_id
,test_text
。 datatype
,test_text
。 value1
,test_text
。 valu2
FROM test_index
LEFT JOIN test_nums
ON test_nums
。 datatype
= test_index
。 datatype
LEFT JOIN test_text
ON test_text
。 datatype
= test_index
。 datatype
PHPMyAdmin results screenshot
然後我跑在PHP腳本相同的SQL和print_r的倒是生成的行,並得到這樣的:
陣列([爲test_id] => 1 [數據類型] => text [externalrecid] => 1 [something] => indextable [rec_id] => 1 [value1] => text value 1 [valu2] => text value 2)
Array([test_id] => 2 [datatype] => [externalrecid] => 1 [something] =>應該是nums [rec_id] => [VALUE1] => [valu2] =>)
正如你可以看到,在第二陣列(記錄集)的字段中的值丟失。
因此,我得出結論:給定字段名稱的第二個值會覆蓋第一個值,因此我不能使用此方法。
在第二個數組轉儲中,我需要的值位於第一組字段名稱中,但它們會被第二組的NULL值覆蓋。不好!!!
但光明的一面:
如果我改變字段名,使他們在次級表,我會得到所有表中的所有字段都是唯一的。
更好的消息是,所有不需要的字段(儘管存在)都有NUL值,這意味着整個記錄集的大小(以字節爲單位)將大大減少,這是我開始時的最初目標。
我的(自家種植的)模板引擎需要進行修改,以便測試BEFORE將值解析到模板中的值(處理中減少了近75%),並且應該使所有內容都加速我的第二個目標)
感謝所有誰參加 - 希望這可以幫助其他人在未來的 - 正如我所說的前面,我不是一個MySQL專家...
你可以用'JOIN'鏈接桌子在一起。 – Eric
謝謝埃裏克 - 我試過了,並在返回的記錄和太多的數據太多領域結束了。另外,一個數據表中的記錄6與另一個數據表中的記錄6沒有任何關聯。 生成的記錄集將嚴重影響服務器上可用的內存。 – MadMan
如果你正在做'select * from',那麼它將返回每個表的所有數據,如果你只列出你感興趣的字段,這將更容易管理。 –