2014-02-26 65 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,或数据的最低正确转义你把查询。

相关问题