mysql — PHP PDO с предложением IN и LIMIT

Я пытаюсь выполнить оператор с предложением IN с использованием PDO и LIMIT.

После этого урока https://phpdelusions.net/pdo#in Мне удалось создать работающий код, но он не извлекает данные так, как должен

        $inStmt = DB::prepare("SELECT following_user_id FROM following WHERE user_id=?");
$inStmt->execute([$userId]);
$arr = ($inStmt->fetchAll(PDO::FETCH_NUM));
$array = array();
foreach ($arr as $element ) {
$array = array_merge($array, $element);
}
$in  = str_repeat('?,', count($array)) . '?';

$params = array_merge($array,[$userId]);
$sql = "SELECT * FROM user_tweets WHERE user_id IN ($in) ORDER BY tweet_date DESC LIMIT 20 OFFSET ?";
$stmt = DB::prepare($sql);
for ($x = 0; $x <= count($params) - 1; $x++) {
$param = $params[$x];
echo " ID:" .($x+1) . " PARAM:". $param;
$stmt->bindParam(($x+1),$param);
}
$param = (int)$startFrom;
echo " ID:" .(count($params)+1) . " PARAM:". $param;
$stmt->bindParam((count($params)+1),$param,PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);

Например, первый оператор возвращает массив [43,42], Затем я объединяю это с 53, так что я получил [43,42,53]

Это отголоски из этого примера

ID:1 PARAM:42 ID:2 PARAM:41 ID:3 PARAM:53 ID:4 PARAM:0

Запрос также создает как следует:

SELECT * FROM user_tweets WHERE user_id IN (?,?,?) ORDER BY tweet_date DESC LIMIT 20 OFFSET ?

Что не так с моим кодом? Я запутался, потому что все должно быть хорошо (когда я вызываю свою базу данных с уже установленными переменными, как показано ниже, она возвращает пару строк, поэтому она должна работать и с PDO, но ничего не возвращает)

SELECT * FROM user_tweets WHERE user_id IN (42,41,53) ORDER BY tweet_date DESC LIMIT 20 OFFSET 0

0

Решение

Это кажется более простым (и бесконечно быстрым) способом сделать то же самое:

SELECT t.*
FROM following f
JOIN user_tweets t
ON t.user_id = f.following_user_id
WHERE f.user_id=?
ORDER
BY t.tweet_date DESC
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]