2013-09-21 17 views
0

我有一個SQL查詢,它有別名。問題是,當我試圖讓列不顯示正確的值的值:當SQL查詢有別名時獲取列值

$sql = "SELECT p.ID, p.ProfileID, p.ModuleID, p.View, p.Add, p.Edit, p.Delete, m.Name, m.ID FROM permission AS p, module AS m WHERE p.ModuleID = m.ID ORDER BY p.ProfileID ASC, m.Name ASC"; 

    $result = array(); 
    $i = 0; 
    foreach ($this->dbconnect->query($sql) as $row) 
    { 
     $result[$i] = array(
     'ID' => $row['p.ID'], 
     'ProfileID' => $row['p.ProfileID'], 
     'ModuleID' => $row['p.ModuleID'], 
     'View' => $row['p.View'], 
     'Add' => $row['p.Add'], 
     'Edit' => $row['p.Edit'], 
     'Delete' => $row['p.Delete']); 

     $i += 1; 
    } 

運行表明,沒有價值時,在數據庫中它實際上是10

如果我改變上述代碼以執行以下操作:

$sql = "SELECT p.ID, p.ProfileID, p.ModuleID, p.View, p.Add, p.Edit, p.Delete, m.Name, m.ID FROM permission AS p, module AS m WHERE p.ModuleID = m.ID ORDER BY p.ProfileID ASC, m.Name ASC"; 

    $result = array(); 
    $i = 0; 
    foreach ($this->dbconnect->query($sql) as $row) 
    { 
     $result[$i] = array(
     'ID' => $row['ID'], 
     'ProfileID' => $row['ProfileID'], 
     'ModuleID' => $row['ModuleID'], 
     'View' => $row['View'], 
     'Add' => $row['Add'], 
     'Edit' => $row['Edit'], 
     'Delete' => $row['Delete']); 

     $i += 1; 
    } 

奇蹟般地,運行表明的m.ID代替p.ID值。很奇怪爲什麼第一個例子不正確。我在這裏錯過了什麼嗎?

+0

'$ result = $ this-> dbconnect-> query($ sql) - > fetchAll();'是您需要的全部**。 –

+0

@common_sense感謝您的輸入,我上面的代碼是原始的精簡版,使問題更容易理解,所以使用建議的代碼是不可行的 – kenanng

+0

第一個代碼塊...'['p。* **']'不存在。在第二個塊中,'p.ID'被'm.ID'覆蓋(因爲它們都被命名爲「ID」,後面的計數)......所以使用別名。 – djot

回答

0

在選擇使用別名每一列,它們是相同的:

$sql = "SELECT p.ID AS permission_id, p.ProfileID, p.ModuleID, p.View, p.Add, p.Edit, p.Delete, m.Name, m.ID AS module_id FROM permission AS p, module AS m WHERE p.ModuleID = m.ID ORDER BY p.ProfileID ASC, m.Name ASC"; 

則:

foreach(...) 
{ 
    $result[$i] = array(
    'Perm_ID' => $row['permission_id'], 
    'Module_ID' => $row['module_id'], 
    ... 
} 
+1

如果downvote,請評論什麼是錯誤的,隨機用戶... –

+1

甜蜜和簡單,將使用建議的代碼,謝謝。 – kenanng

2

你應該是這樣的......

SELECT p.ID as p_ID, ... 

而且

'ID' => $row['p_ID'],