2011-04-21 94 views
0

我想要將來自PHP查詢的返回結果與來自另一個表的字段進行排序,該字段在返回第一個表時收集。解釋...PHP SQL排序依據來自不同表中的字段

$args1 = array('order' => 'ASC'); 
    $list = get_users($args1); 

     foreach ($list as $post) { 
      $email = $post->user_email 

; 
     $id = $post->ID; 

     $user = get_userdata($id); 
     $firstname = $user->user_firstname; 

解釋... get_users從用戶數據庫中獲取所有用戶。問題是usersdata是另一個包含用戶姓氏的表。我們需要第一個查詢中的ID來獲取正確的姓氏。這就是我們想通過這個姓氏排序整個數據的姓氏。

Userdata表使用meta_keys以及每個鍵旁邊對應用戶的ID。

所以我後面是用usermeta鍵「姓氏」排序用戶數據。這是完整的代碼。

$args1 = array('order' => 'ASC'); 
$list = get_users($args1); 

foreach ($list as $post) { 
    $email = $post->user_email; 
    $id = $post->ID; 

    $user = get_userdata($id); 
    $firstname = $user->user_firstname; 
    $lastname = $user->user_lastname; 
    $return .= '<li> 
       <a href="#sidebar2" onClick="slide(this); return false" rel="clients_list_page" style="line-height:16px;">'.$firstname.' '.$lastname.'<br /><span style="font-size:10px; color:#555;">'.$email.'</span></a> 
      </li>'; 

} 
    $return .= '</div>'; 

任何想法?

非凡

回答

2

它看起來過於複雜,你這樣做。您不能只使用JOIN從一個查詢中的兩個表中獲取數據嗎?

在普通的SQL,這將是這樣的:

SELECT users.email, userdata.firstname, userdata.lastname 
    FROM users LEFT JOIN userdata 
     ON users.id=userdata.user_id 
    ORDER BY userdata.lastname 
+0

這是非常好的,但它不會完成任務,因爲我們在名爲firstname或lastname的表中沒有行。該行稱爲META KEY,在該行中是firstname,lastname和address的字段,其中包含與原始用戶相對應的ID。 – 2011-04-23 11:53:28

0

如果我理解正確的問題,那麼這不是一個PHP的問題。

你可以通過一個簡單的連接來解決這個問題,並在數據庫方面命令所有的東西。即使你使用的是某種ORM,你也可以運行一個查詢,它只能從一個表格返回字段,並且順序正確。

0

@ jeroen是正確的使用一種JOIN。有兩種類型的JOIN,一個LEFT JOININNER JOIN。兩者之間的區別在於LEFT JOIN,如果左邊的表格(在這種情況下爲users表格)包含右表中沒有相應記錄的記錄(例如,您的users表格中記錄的id爲與您的userdata表中的記錄不匹配),它將從左表中返回這些行,NULL值表示應該來自右表的值。使用INNER JOIN這些行將不會被返回。

一個INNER JOIN語法將是這個樣子:

SELECT users.email, userdata.firstname, userdata.lastname 
    FROM (users, userdata) 
     WHERE (users.id = userdata.user_id) 
    ORDER BY userdata.lastname ASC 

如果你想任何附加條件添加到查詢,您只需將它們放在WHERE子句。

+0

實際上你是走了 - 有幾種方法可以加入,而不僅僅是內心和左邊。您可以交叉連接,straight_join,straight_join打開,左和右,左外部/右外部連接和自然連接。在15年的編程中,即使是我遇到的最好的全職DBA,也沒有精通這些選項,我認爲作爲一個社區,我們應該努力提高效率。這些用於/每個解決方案正在成爲常見的方式,即使是它的內容。 – bpeterson76 2011-04-21 19:13:17

+0

@ bpeterson76感謝您的啓發,我不知道有這麼多不同的JOIN。回到我想的書上來... – Kyle 2011-04-25 20:21:54