php – 获取与其id对应的名字和姓氏

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 获取与其id对应的名字和姓氏脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
问题

所以,我不知道我怎么能做到一点,但我想做的是获得领导者的名字和姓氏,以及学生使用他们的身份证.在我得到学生和领导者的名字和姓后,我需要输出它.

团队

id | leaderID | studentID
1  | 123      | 123456
2  | 123      | 09
3  | 123      | @R_406_2568@6
4  | 233      | 80
5  | 233      | 997

学生表

studentID | Firstname | lastname | teacherID
----------|-----------|----------|----------
123       | Dave      | Jackson  | 23
123456    | Jessie    | Roberts  | 23
09        | Rick      | Rustels  | 24
7776      | Blake     | Jackson  | 25
80        | Ashly     | Kenson   | 23
233       | Lilly     | Street   | 25
997       | Billy     | Street   | 24

我目前正在获得什么(第一个id是领导者的id)

123
123456
09
7776

233
80
997

我想要的是

Dave Jackson
Jessie Roberts
Rick Rustels
Blake Jackson

Lilly Street
Ashly Kenson
Billy Street

所以基本上我想得到与他们的ID相对应的名字和姓氏.

PHP代码

<?PHP 

require '../connect.PHP';

$team_data = $link->PRepare("SELECT leaderID,studentID,CONCAT(firstname,' ',lastname) as firstlast From teams,students Order by leaderID,studentID");
$team_data->execute();
$team_data = $team_data->fetchAll();

if(!$team_data) {
    header("Location: ../../admin.PHP?msg=Sorry we Could not get the data");
}

$data = [];

foreach ($team['firstlast'] as $team) {
    $leader_id = $team['leaderID'];
    $student_id = $team['studentID'];
    $data[$leader_id][] = $student_id;
}

?>

<!DOCTYPE htML>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <tITle>Teams</title>
</head>
<body>

    <?PHP foreach ($data as $leader_id => $students): ?>
        <ul>
            <li><strong><?PHP echo $leader_id; ?></strong></li>
                <?PHP foreach ($students as $student_id): ?>
            <li><?PHP echo $student_id; ?></li>
                <?PHP enDForeach; ?>
        </ul>
    <?PHP endforeach; ?>

</body>
</html>

解决方法

单一查询

(
  SELECT 1 AS leader,s.studentID AS leaderID,s.studentID,s.firstname,s.lastname
  From teams AS t
  JOIN students AS s ON s.studentID = t.leaderID
  group by t.leaderID
) UNION (
  SELECT 0 AS leader,t.leaderID,s.lastname
  FROM teams AS t
  JOIN students AS s ON s.studentID = t.studentID
) ORDER BY 2,1 DESC;

查询由两个SELECT和一个UNION组成.第一个选择仅使用GROUP BY删除重复项的领导者.第二个子查询选择其余学生.最后,结果集按领导者ID按升序排序,按领导者标志按降序排序.

样本输出

leader leaderID studentID firstname lastname
1      123      123       Dave      Jackson
0      123      9         Rick      Rustels
0      123      7776      Blake     Jackson
0      123      123456    Jessie    Roberts
1      233      233       Lilly     Street
0      233      80        Ashly     Kenson
0      233      997       Billy     Street

请注意,您可能需要优化表结构才能运行此查询而不会降低性能.例如,您可能需要为leaderID和studentID列添加索引.

两个查询PHP

通常,一些简单查询比单个复杂查询更快.此外,在某些情况下,在PHP中而不是在sql中实现排序和分组操作时会更快.以下是另一种可能比上述复杂查询运行得更快的方法.制定一些基准测试,以找出哪种更适合您的情况.

<?PHP
$result = [];

// Collect only leaders
$q = 'SELECT s.studentID,s.lastname
    FROM students AS s,teams AS t
    WHERE t.leaderID = s.studentID
    GROUP BY 1';
$cursor = Db::query($q);
while ($row = Db::fetchNext($cursor)) {
    $result[$row['studentID']][] = $row;
}
$cursor->free();

// Collect the rest
$q = 'SELECT s.studentID,teams AS t
    WHERE t.studentID = s.studentID';
$cursor = Db::query($q);
while ($row = Db::fetchNext($cursor)) {
    $leader_id = $row['leaderID'];
    if (isset($result[$leader_id])) {
        $result[$leader_id][] = $row;
    }
}
$cursor->free();

一个块仅选择领导者并将其存储到$student结果中.

如果存在相应的leaderID,则第二个块收集其余学生并以类似的方式将它们存储到$result中. (您可以通过IN()将引导ID传递给WHERE子句来跳过此检查.)

由于$result最初由领导者填补,领导者将被存储在第一个位置:

Array
(
    [123] => Array
        (
            [0] => Array
                (
                    [studentID] => 123
                    [firstname] => Dave
                    [lastname] => Jackson
                )

            [1] => Array
                (
                    [studentID] => 123456
                    [leaderID] => 123
                    [firstname] => Jessie
                    [lastname] => Roberts
                )
                (skipped...)
        )

    [233] => Array
        (
            [0] => Array
                (
                    [studentID] => 233
                    [firstname] => Lilly
                    [lastname] => Street
                )
                (skipped...)
        )
)

Db :: query()和Db :: fetchNext()是虚函数.前者对数据库执行SQL查询并将游标返回到结果集.后者使用游标获取一个结果.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 获取与其id对应的名字和姓氏全部内容,希望文章能够帮你解决php – 获取与其id对应的名字和姓氏所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。