我正在为一个学校项目开发自己的Twitter风格的社交媒体。我用PHP编写代码,并将用户、帖子和追随者存储在MYSQL表中(我的变量名是瑞典语,因此它们被称为:anvandare、inlagg和foljningar)
所以现在我只想展示我关注的人的帖子。我决定获取我关注的用户的所有用户ID,并将它们存储在一个数组中。
$sqlfoljer="select foljarid, foljdid from foljningar where foljarid =$anvandarID";
$stmt = $conn->prepare($sqlfoljer);
$stmt->execute();
$row = $stmt->fetch();
if (!$row)
{
echo "You are not following anyone.";
die();
}
$foljer = array();
while ($row != null)
{
array_push($foljer, $row['foljdid']);
$row = $stmt->fetch();
}
我在一个查询中获取所有帖子,然后检查写这些帖子的人是否在我关注的人群中
$sql = "select id, datumskapat, text, bild, anvandarID, namnAnvandare from inlagg order by datumskapat desc";
$stmt = $conn->prepare($sql);
$stmt->execute();
$row = $stmt->fetch();
if (!$row)
{
exit();
}
while ($row != null)
{
$anvandarID = $row['anvandarID'];
$inlaggsid = $row['id'];
if(in_array($anvandarID, $foljer))
{
$sqlgillar = "select count(*) as antalgillar from gillningar where inlaggsid = :inlaggsid";
$params2 = array(':inlaggsid'=>$row['id']);
$stmt2 = $conn->prepare($sqlgillar);
$stmt2->execute($params2);
$row = $stmt2->fetch();
if ($bild != null)
{
//Lägg tll bild
echo "<img src="visabild.php?id=$inlaggsid" alt="Bild" />";
}
}
$row = $stmt->fetch();
}
else
{
echo"You dont follow this person";
}
}
好吧,问题是这不起作用。当我在浏览器中输入页面时,感觉它冻结了,但它只需要很长的时间,然后我会得到"最长时间"的致命错误。
帖子加载不正确。它只是来自一个人(数组中的第一个personID)的帖子。我为in_array添加了一个else语句,它无限次地重复着"你不要跟着这个人",直到30秒的休息。
有人能发现我做错了什么吗?
你不应该得到所有的帖子,当你关注它们时,请检查它的作者。这需要太长的日志时间。相反,您应该让数据库来做这项工作。您可以帮助您的数据库并在字段anvandarID
上添加索引,从而防止对整个表进行seq扫描,并显著提高查询速度和效率。
您应该在查询中添加WHERE anvandarID IN ()
条件以进行后期选择:
$in = str_repeat('?,', count($foljer) - 1) . '?';
$sql = "select id, datumskapat, text, bild, anvandarID, namnAnvandare from inlagg
WHERE anvandarID IN ($in) order by datumskapat desc";
$stmt = $conn->prepare($sql);
$stmt->execute($in_array);
$data = $stmt->fetchAll();