gpt4 book ai didi

php - 在循环中使用 sql 查询

转载 作者:行者123 更新时间:2023-11-29 04:00:08 24 4
gpt4 key购买 nike

我的 foreach 循环中有一个查询,我觉得我不应该这样做。

我将如何改进这段代码(这里我选择消息):

try{
$sql="
SELECT * FROM messages
WHERE workspace_id=:project_id
ORDER BY message_created DESC
LIMIT 20
OFFSET :offset";
$stmt=$db->prepare($sql);
$stmt->bindValue(':project_id', $project_id, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$messages=$stmt->fetchAll(PDO::FETCH_ASSOC);
}catch(Exception $e){echo $e->getMessage();}

现在我需要表 users 中的用户名字和姓氏。除了把它放在一个循环中,我想不出另一种方法。

foreach($messages as $row){ 
echo $row['message'];

$sql= "SELECT first_name, last_name FROM users
WHERE user_id=:id
LIMIT 1";
$stmt=$db->prepare($sql);
$stmt->bindValue(':id', $row['sent_by']);
$stmt->execute();
$user=$stmt->fetch(PDO::FETCH_ASSOC);

echo $user['first_name'] . " " . substr($user['last_name'],0,1) . ".";
}

此代码按我希望的方式工作,但看起来不应该以这种方式完成。

谁能帮帮我

最佳答案

您可以执行 SQL 连接以完全避免 foreach 循环。

  try{
$sql="
SELECT messages.*, users.first_name, users.last_name
FROM messages join users on messages.user_id = users.user_id
WHERE workspace_id=:project_id
ORDER BY message_created DESC
LIMIT 20
OFFSET :offset";
$stmt=$db->prepare($sql);
$stmt->bindValue(':project_id', $project_id, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$messages=$stmt->fetchAll(PDO::FETCH_ASSOC);
}catch(Exception $e){echo $e->getMessage();}

注意:我假设消息表有用户 ID 并存储在“user_id”字段中。如果不同,相应地更改字段名称。

关于php - 在循环中使用 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922514/

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