gpt4 book ai didi

php - 获取新闻提要(社交媒体)

转载 作者:可可西里 更新时间:2023-11-01 06:37:06 25 4
gpt4 key购买 nike

我目前正在开发一个社交媒体应用程序,其中包括用户(您可以将他们添加为 friend )和帖子(文本、图片等...)

我想在用户进入应用时向用户显示与用户的帖子和用户 friend 的帖子相比的 5 个最新帖子。

我知道这不是实现此目标的最明智方法,但到目前为止我已经做到了。 查询只返回一篇文章,但还有更多,甚至不是最新的也不是最旧的。我认为问题出在“OR”子句中。

我获取了用户的所有好友,并用“OR”子句将 WHERE 子句一一放入。

        //CURRENT FRIENDS
$sql = 'SELECT current AS currents FROM friends WHERE sno = :sno';
$query = $this -> conn -> prepare($sql);
$query -> execute(array(':sno' => $usersSno));

$friends = $query -> fetchObject() -> currents;

//SELECT 5 NEWEST POST
$sql = 'SELECT operationId FROM posts WHERE operationId = :operationId';
$array = array(':operationId' => $usersSno);

if(isset($friends)) {
$ids = explode(",", $friends);
for($i = 0; $i < count($ids); $i++) {
$sql = $sql.' OR operationId = :operationId'.$i;
$array[':operationId'.$i] = $ids[$i];
}
}

if($from == null)
$sql = $sql.' ORDER BY operationId DESC LIMIT 5';
else {
$sql = $sql.' AND operationId < :from ORDER BY operationId DESC LIMIT 5';
$array[':from'] = $from;
}

$query = $this -> conn -> prepare($sql);
$query -> execute($array);
$result = $query -> fetchAll(PDO::FETCH_ASSOC);

用户的 sno 是 1,用户有两个 friend ,他们的 sno 分别是 2 和 75。

echo $sql;

SELECT operationId FROM posts WHERE operationId = :operationId OR operationId = :operationId0 OR operationId = :operationId1 ORDER BY operationId DESC LIMIT 5

print_r($array);

Array
(
[:operationId] => 1
[:operationId0] => 2
[:operationId1] => 75
)

最佳答案

我觉得自己在开始赏金后立即意识到自己的错误是愚蠢的。我应该使用 WHERE sno(因为我一直从用户 ID [sno] 获取帖子)而不是 $sqlWHERE operationId/p>

所以 echo $sql; 就像:

SELECT operationId FROM posts WHERE sno = :sno OR sno = :sno0 OR sno = :sno1 ORDER BY operationId DESC LIMIT 5

print_r($array) 是:

Array
(
[:sno] => 1
[:sno0] => 2
[:sno1] => 75
)

至少我很乐意解决这个问题,甚至是我自己解决它:)

EDIT: I noticed two logical error too in my sql query.

1- 将日期字符串与帖子的 operationId 进行比较 我将帖子与其日期进行比较(您也可以与帖子的 operationId 进行比较)以查看哪个是最新的。但在代码中,我将 operationId 与 $from 变量(这是一个日期字符串)进行了比较。

最后的代码;

$sql = $sql.') AND createdAt < :from ORDER BY operationId DESC LIMIT 5';

2- OR 子句应与 AND 子句用括号分隔。

括号开始

$sql = 'SELECT operationId FROM posts WHERE (sno= :sno';

括号结束

if($from == null)
$sql = $sql.') ORDER BY operationId DESC LIMIT 5';
else {
$sql = $sql.') AND createdAt < :from ORDER BY operationId DESC LIMIT 5';
$array[':from'] = $from;
}

关于php - 获取新闻提要(社交媒体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50441118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com