我有一个名为friends
的友谊表,如下所示:
id | user1 | user2
------------------
1 | ab | abc
2 | ab | abcd
3 | aa | ab
如果"ab"
和"abc"
位于同一行,则表示他们是朋友。现在,当用户说"ab"
登录时,他会看到他的朋友'帖子('abc'
,'abcd'
和'aa'
的帖子)以下是php代码:
session_start();
$name = $_SESSION['username']; //$name=ab;
$stmt = mysqli_prepare($link,"SELECT location,postby,pid,likes,time FROM photos WHERE postby=? ORDER BY time");
$query = $link->query("(select user2 from friends where user1='$name')union(select user1 from friends where user2='$name')");
while($row=mysqli_fetch_array($query)) {
$b = $row['user2'];
$stmt->bind_param('s', $b);
mysqli_stmt_execute($stmt);
$stmt->bind_result($location, $postby,$id,$likes,$time);
$stmt->store_result();
while ($stmt->fetch()) {
//code to display picture
}
}
问题是结果并不是真正的时间顺序。它将首先显示用户的所有帖子,并按时间对该用户的帖子进行排序,然后显示另一个用户的帖子,并按时间对该用户的帖子进行排序,但我想按顺序排序所有帖子时间。我怎样才能做到这一点?
答案 0 :(得分:1)
问题是您在单独的查询中获取结果。
您应该查询要显示帖子的所有用户ID(在您的情况下为'ab','abc','abcd'和'aa'),然后执行一个查询以获取所有帖子并订购结果
$stmt = mysqli_prepare($link,"SELECT location,postby,pid,likes,time FROM photos WHERE postby IN (?) ORDER BY time");
答案 1 :(得分:1)
您必须在一个查询中获取好友帖子。
尝试以下方法:
$sql = 'SELECT location, postby, pid, likes, time
FROM photos
WHERE
postby IN (
SELECT user2 FROM friends where user1=?
UNION
SELECT user1 FROM friends where user2=?
)
ORDER BY time';
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ss', $name, $name);
$stmt->execute();
答案 2 :(得分:0)
这是因为您的每个查询都会执行日期查询。首先,您尝试获取一个用户的所有数据,然后按日期时间排序。然后你找到其他用户和按时间排序。
如果你用连接编写一个完整的SQL语句然后statmenet make ordered,那会更好。
你可以发布整个表格,然后我可以给你写一个SQL查询,它会根据用户进行连接并按时间排序。
因为这是M的表:M你可以发布数据库设计的全貌。或者至少是关系中的表。