У меня есть запрос в моем цикле foreach, и я чувствую, что не должен этого делать.Использование sql-запросов в цикле
Как будет идти об улучшении этого кода (Здесь я выбираю сообщения):
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) . ".";
}
Этот код работает так, как я хочу, но не похоже, что это должно быть сделано таким образом.
Может кто-нибудь помочь мне здесь
Вы пытаетесь получить сообщение, связанное с сообщением конкретно? Если это так, мы можем просто выполнить 'join' в' sent_by', соответствующем столбцу 'id' от пользователей. например: 'LEFT JOIN users on users.id = messages.sent_by' – Ohgodwhy
Почему бы просто не присоединить пользователей к сообщениям? – GordonM
Спасибо! Прекрасно работает! Но теперь я должен указать все столбцы для выбора, потому что у пользователя более 30 столбцов, и мне просто нужно два. Ну, гораздо лучше сделать это так, а затем цикл – user3284463