2014-07-01 62 views
-1

我正在嘗試爲使用MySQL和PHP的公司列表編寫一個簡單的界面。所以,我想從我的數據庫中獲取一些信息。查詢結果中多餘的colomns

這裏是我的表:

  • companies_data - 僅適用於系統的信息。
  • corporate_data - 這裏我想保留有關大公司的信息。
  • individual_data - 在這裏我想保留有關小公司的信息。

所以,這裏是表 http://i.imgur.com/Iy39mfe.png

這裏是我寫的查詢:

SELECT 
    a.id, 
    a.user_id, 
    a.added, 
    a.`status`, 
    a.company_id, 
    a.company_type, 
    a.deposit, 
    a.individual_operations_cache, 
    a.corporate_operations_cache, 
    a.physical_operations_cache, 
    b.full_name, 
    b.tax_number, 
    b.address, 
    b.statement_date, 
    b.psrn, 
    c.full_name, 
    c.tax_number, 
    c.address, 
    c.statement_date, 
    c.psrn 
FROM 
    companies_data a 
    LEFT OUTER JOIN corporate_data b 
     ON (a.company_id = b.id) AND a.company_type = 0 
    LEFT OUTER JOIN individual_data c 
     ON (a.company_id = c.id) AND a.company_type = 1 
WHERE 
    a.user_id = 3 

這只是一個測試的代碼,我將展開不久。

http://i.imgur.com/6ptdnsj.png

正如你看到的,我已經有了結果有額外的領域,如%FIELD_NAME%1%another_field_name%1等等。當然,這不是mysql錯誤 - 我問過我有 - 但我想刪除這些字段?這是可能的,或者我必須在應用程序端轉換此輸出?

+0

您應該使用聯合而不是第二次聯接。甚至可以更好地將您的表「corporate_data」和「individual_data」合併到一個表中。 – VMai

+1

MySQL本身並沒有這樣做,也沒有MySQL的任何PHP擴展。您必須使用PHP數據訪問庫來添加額外的字段,以便關聯數組鍵(或對象字段)不會相互覆蓋。 –

回答

1

茨艾倫%FIELD_NAME%1%another_field_name%1,是可見的,因爲你是在查詢中選擇它們: b.full_name, b.tax_number, b.address, b.statement_date, b.psrn , c.full_name, c.tax_number, c.address, c.statement_date, c.psrn

當您使用領域在不同的表相同的名稱,那麼結果列名都配備有該標識field1,field2,fieldn ...以區分哪個tabl這個領域是從哪裏來的。 如果你想避免這個名字,你可以使用別名如下: [...] b.full_name爲corporate_full_name, [...]

也許,如果每個公共字段是一致的,你贏了無需全部顯示,只需將它們從選擇中刪除即可。

希望對你有用。 Br。

+0

但我想做這樣的事情,因爲創建額外的字段將很難在稍後編輯。 ![Pic](https://www.dropbox.com/s/diw3lhk07ecsx05/pic.png) – Ascelhem

+0

嗯,我創建了另一個查詢。 (table_1 join table_2)union(table_1 join table_3)並且它完美地工作。謝謝大家! – Ascelhem