2014-02-26 60 views
0

我需要按字母順序顯示姓氏和姓氏(按姓氏排序)的列表。 問題是我不能在SQL查詢中執行ORDER BY,因爲我在一個表中檢索我的用戶ID,並檢索另一個表中的信息。顯示字母順序的名稱和姓氏的列表

我的PHP代碼:

$sql = "select id FROM $table_name"; 
$result = $wpdb->get_results($sql); 
foreach ($result as $record) { 
    $id = $record->id; 

    $sql2 = "select field_name, field_val FROM $table_name2 where sub_id = $id"; 
    $result2 = $wpdb->get_results($sql2); 
    foreach ($result2 as $record2) { 
     if($record2->field_name == "Nom :") { 
      $surname = ucfirst(stripslashes($record2->field_val)); 
     } 
     if($record2->field_name == "Prénom :") { 
      $name = ucfirst(stripslashes($record2->field_val)); 
     } 
    } 

    echo $name . " " . $surname . "<br/>"; 
} 

這裏第二個表的結構:

f_id sub_id  field_name  field_val 
127  19   Prénom :  Philippe 
128  19   Nom :   Nailloux 
129  20   Prénom :  John 
130  20   Nom :   Drumond 

你有一個想法,我怎麼能顯示我的名單按姓氏字母順序排列的?

謝謝。

+1

這是學習[SQL JOINS](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)對你非常有用的地方 –

回答

1

您可以使用此SQL查詢做的伎倆:

SELECT t1.id  AS user_id, 
     t2.field_val AS surname, 
     t3.field_val AS name 
FROM $table_name t1 
     JOIN $table_name2 AS t2 
     ON (t2.sub_id = t1.id 
       AND t2.field_name = 'Nom :') 
     JOIN $table_name2 AS t3 
     ON (t3.sub_id = t1.id 
       AND t3.field_name = 'Prénom :') 
ORDER BY t2.field_val 

查詢將返回按姓氏排序所需要的所有相關信息(USER_ID,姓和名)。

+0

謝謝,它正在工作! – superscral

0

使用子查詢!

在你的例子中,假設你有100個用戶。 在第一個查詢中,您獲取用戶ID,然後爲每個用戶查詢數據庫中的數據。 這是一個簡單的操作101查詢!如果您每秒有10次訪問,該怎麼辦?這是超過1000個查詢。

有很多策略(子查詢,連接,兩個查詢在第二個in()),但在這種情況下,認爲:

SELECT 
    field_name, field_val 
FROM 
    $table_name2 
WHERE 
    sub_id IN(
    SELECT 
     id 
    FROM 
     $table_name 
) as sq1 
ORDER BY field_val ASC; 

還要考慮使用PHP PDO,或數據的最低正確轉義你把查詢。

相關問題