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