php - 尝试根据 1 个 SELECT 语句中另一个表中的另一列检索的信息,从 1 个表中的 1 列获取信息

标签 php mysql

我正在尝试根据从 1 个 SELECT 语句中另一个表中的另一列检索到的信息,从 1 个表中的 1 列中获取信息,同时尽可能简化我的代码

我有 2 张 table

视频

------------------------------
| id |  date  | userID | ... |
------------------------------
| 1  | <date> |   1    |     |
------------------------------
| 2  | <date> |   5    |     |
------------------------------
| 3  | <date> |   1    |     |
------------------------------
| 4  | <date> |   2    |     |
------------------------------
| 5  | <date> |   2    |     |
------------------------------
.
.
.
------------------------------
| n  |        | user-n |     |
------------------------------

(id为1的视频由下表中id为1的用户上传)
(id 2 的视频由 id 5 的用户上传)
(id 3的视频由id 1的用户上传)
等等

用户信息

-----------------------------
| id | ... | username | ... |
-----------------------------
| 1  |     | Bob      |     |
-----------------------------
| 2  |     | Alice    |     |
-----------------------------
| 3  |     | Ned      |     |
-----------------------------
| 4  |     | Jill     |     |
-----------------------------
| 5  |     | John     |     |
-----------------------------
.
.
.
-----------------------------
| n  |     | name-n   |     |
-----------------------------

(ID 为 1 的用户的用户名是 Bob)
(ID 2 的用户的用户名是 Alice)
等等

我需要的是从按日期排序的 8 个最新视频中获取用户名

如果按日期排序后视频的顺序是
视频5
视频1
视频3
视频4
视频2
.
.
.

我也想按顺序获取上传者的用户名

所以在这种情况下结果应该是
Alice(ID 2 = Alice 的用户上传的视频 id 5)
Bob(ID 1 = Bob 的用户上传的视频 ID 1)
Bob(ID 1 = Bob 的用户上传的视频 ID 3)
爱丽丝...
约翰...
.
.
.

连接.php

try {

    $servername = "localhost";
    $username = "*****";
    $password = "*********";
    $database = "****";
    $charset = 'utf8';

    $dsn = "mysql:host=$servername;dbname=$database;charset=$charset";

    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];

    $pdo = new PDO ( $dsn , $username , $password , $opt );

} catch ( PDOException $e ) {

    file_put_contents ( 'PDOError.txt', $e->getMessage(), FILE_APPEND );
    echo "Failed to connect to database!";
    die ();

}

代码可以工作,但很麻烦

函数.php

try {

    $prepareVideo = $pdo->prepare( "SELECT userID FROM video WHERE 1 ORDER BY date DESC LIMIT 8" );
    $prepareVideo->execute([]);
    $geVideo = $prepareVideo->fetchAll();

} catch ( PDOException $e ) {

    file_put_contents ( 'error.txt', $e->getMessage(), FILE_APPEND );

}

if ( $geVideo ) {

    foreach ( $geVideo as $row ) {

        $userID = $row['userID'];

        try {

            $prepareUser = $pdo->prepare( "SELECT username FROM userinfo WHERE id = ? LIMIT 1" );
            $prepareUser->execute([$userID]);
            $getUser = $prepareUser->fetch();

        } catch ( PDOException $e ) {

            file_put_contents ( 'error.txt', $e->getMessage(), FILE_APPEND );

        }

        if ( $getUser ) {

            $username[] = $getUser['username'];

        }

    }

}

但这需要太多代码

我想要做的是与上面相同的操作,但仅在 1 个 SELECT 语句中,例如

函数.php

try {

    $prepareUsername = $pdo->prepare( "SELECT..." );
    $prepareUsername->execute([]);
    $getUsername = $prepareUsername->fetch();

} catch ( PDOException $e ) {

    file_put_contents ( 'error.txt', $e->getMessage(), FILE_APPEND );

}

if ( $getUsername ) {

    $username[] = $getUsername['username'];

}

插入与上面执行相同操作的单个 SELECT 语句

到目前为止我已经尝试过

SELECT u.username FROM userinfo u WHERE u.id IN ( SELECT v.userID FROM video v )

但这只是列出了上传视频的用户的用户名

在本例中,3 个名称按照用户信息表中的 ID 顺序排列
鲍勃
爱丽丝
约翰

这不是我想要的

希望有人能帮忙

最佳答案

以正确的顺序从视频中选择,同时加入用户信息

例如:

SELECT v.id AS videoID, u.username
  FROM video AS v
  JOIN userinfo AS u ON v.userID = u.id -- or left join, if user might not exist
 ORDER BY v.uploadedAt DESC

演示:https://www.db-fiddle.com/f/quQZ9Cnx14exk4BHqD5sEV/2

关于php - 尝试根据 1 个 SELECT 语句中另一个表中的另一列检索的信息,从 1 个表中的 1 列获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204291/

相关文章:

php - Laravel 5.6 无法访问某些 .env 变量

php - 在我的 PHP 脚本中找不到错误。有人可以指出给我吗

mysql - 适合初学者的 ASP 分页

php - MySQL、PHP 在负载下重复

php - 数据库中任何用户的图像上传

mysql - mysql中的高级排序

php - 在 PHP 中调用 super 方法

php - Google reCaptcha 2.0 不工作,是否用于 curl ?

php - 如何根据我的子查询构建 php 表单?

javascript - 具有大量图像的网站的客户端服务器通信技巧