显示按字母顺序排列名称和姓氏的列表

时间:2014-02-26 08:17:26

标签: php sql sql-order-by

我需要按字母顺序显示名称和姓氏列表(按姓氏排序)。 问题是我无法在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

您是否知道如何按字母顺序显示按姓氏排序的列表?

感谢。

2 个答案:

答案 0 :(得分: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,姓氏和姓名)。

答案 1 :(得分: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,或至少正确转义您在查询中放入的数据。

相关问题