我需要按字母顺序显示名称和姓氏列表(按姓氏排序)。 问题是我无法在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
您是否知道如何按字母顺序显示按姓氏排序的列表?
感谢。
答案 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
,或至少正确转义您在查询中放入的数据。