Проблема: я узнаю больше о SQL-запросах, и я пытаюсь понять, почему эта функция и запрос возвращают только статусы с user_id из 26 и 25, но ничего не возвращают из 27 или 31.SQL-запрос не возвращает правильные значения
Вопрос: Почему это не возвращает статусы для пользователей 27 или 31? (Я подтвердил, что пользователь 27 и 31 имеют статусы для возвращения)
Вот код ниже:
public function t_status($friends, $groups, $user_id, $start, $per_page, $db){
$group_array = implode(',', $groups);
$friend_array = implode(',', $friends);
$stmt = $db->prepare("SELECT * FROM statuses WHERE (user_id IN (:friend_array) && user_id IS NOT NULL) OR user_id = :auth_id OR (group_id IN (:group_array) && group_id IS NOT NULL && group_id != 0) ORDER BY updated_at DESC LIMIT :offset, :limit");
$stmt->bindParam(':auth_id', $user_id);
$stmt->bindParam(':group_array', $group_array);
$stmt->bindParam(':friend_array', $friend_array);
$stmt->bindParam(':offset', $start, PDO::PARAM_INT);
$stmt->bindParam(':limit', $per_page, PDO::PARAM_INT);
$stmt->execute();
if ($stmt->rowCount() > 0) {
while($row = $stmt->fetchAll()) {
return $row;
}
}
}
Когда я print_r ($ group_array) я получаю 51 и print_r ($ friend_array) получает 25 , 27,31. Из того, что я могу видеть, что это только получать статусы от первого пользователя в другом массиве 25 и игнорируя 27 и 31.
Я испытал это внутри PHPMyAdmin с помощью:
SELECT * FROM statuses WHERE (user_id IN (25,27,31) && user_id IS NOT NULL) OR user_id = 26 OR (group_id IN ('51,') && group_id IS NOT NULL && group_id != 0) ORDER BY updated_at DESC LIMIT 0, 10
Это работало отлично. Любая помощь будет принята с благодарностью.
Работы сейчас благодаря и, что более важно, я понимаю, почему это не сработало. Ваше объяснение проблемы с массивом и привязкой помогло. – Niall
Я рад, что смог помочь :) – nospor