我在运行代码时遇到问题。该代码确实按日期时间从数据库中进行排序,但仍然按照关注者数据库的ID的顺序进行排序。我想按日期时间排序所有消息,而不要按日期和时间排序...希望您能为我服务!
查询关注者:
$sqlselector = "SELECT * FROM isFollowing WHERE follower=?;";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sqlselector)) {
header("Location: ../index.php?error=sqlerror");
exit();
}
else {
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
$resultget = mysqli_stmt_get_result($stmt);
$resultselector = mysqli_stmt_num_rows($stmt);
while($selector = mysqli_fetch_assoc($resultget)) {
查询消息:
$sqlmeessages = "SELECT * FROM meessages WHERE idUser=? ORDER BY `meessages`.`timePosted` ASC LIMIT 200;";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sqlmeessages)) {
header("Location: ../index.php?error=sqlerror");
exit();
}
else {
mysqli_stmt_bind_param($stmt, "i", $selector['isFollowing']);
mysqli_stmt_execute($stmt);
$resultmeessages = mysqli_stmt_get_result($stmt);
}
//while loop for the meessages
while($rowmeessages = mysqli_fetch_assoc($resultmeessages)) {
我希望结果是消息仅按日期时间排序,而不按其他数据库的ID排序!
答案 0 :(得分:0)
为什么不只用一个查询就可以做到这一点?很难遵循您的数据结构,但是像这样:
SELECT m.*
FROM isFollowing f JOIN
messages m
ON m.idUser = f.follower
WHERE f.follower = ?
ORDER BY m.TimePosted;
答案 1 :(得分:0)
这里的问题是,您正在运行一个无序查询,然后运行多个有序查询。整个循环仍在无序查询上运行。但更重要的是,您无需执行许多查询即可返回单个数据集。通过JOIN
关键字,您可以将表连接到单个结果集中。
例如:
SELECT *
FROM isFollowing
INNER JOIN messages ON isFollowing.follower = messages.idUser
WHERE isFollowing.follower = ?
ORDER BY messages.timePosted ASC
LIMIT 200
(与SELECT *
相比,您甚至可能对列更明确,尤其是在两个表中都使用任何列名的情况下。)
这实际上只是对 S 结构化的 Q 查询 L 语言可以查询关系数据所做的工作的了解。根据一般经验,让SQL处理查询和结构化数据的优化总比总是好,而不是(确实很擅长)简单的查询,并在应用程序代码中将它们组合在一起。