Создание нескольких различных динамических c запросов в MySQL - PullRequest
0 голосов
/ 18 января 2020

это мой первый вопрос ... Я делаю динамический шаблон блога c и хочу показать следующие 4 сообщения блога из базы данных MySQL, вот что я делаю сейчас:

$stmt = $conn->prepare("SELECT id, title, filename, date, content FROM blogs WHERE id=:id");

// bind in execute with an array. 

$values = [
    'id' => $id+1
];

$stmt->execute($values);

while ($row = $stmt->fetch())
{

$filename1 = $row['filename'];
$title1 = $row['title'];
$date1 = date_format(date_create($row['date']),"F j, Y");
$content1 = substr($row['content'], 0, 85);


$photo1 = preg_replace("/\..+/", "-thumb.jpg", $row['filename']);
}

$stmt = $conn->prepare("SELECT id, title, filename, date, content FROM blogs WHERE id=:id");

// bind in execute with an array. 

$values = [
    'id' => $id+2
];

$stmt->execute($values);

while ($row = $stmt->fetch())
{

$filename2 = $row['filename'];
$title2 = $row['title'];
$date2 = date_format(date_create($row['date']),"F j, Y");
$content2 = substr($row['content'], 0, 85);


$photo2 = preg_replace("/\..+/", "-thumb.jpg", $row['filename']);
}

(и то же самое для 3, 4)

Хотя это точно работает, я чувствую, что это довольно неэффективный и дорогой способ сделать это. Каков будет правильный способ выполнения этой задачи?

1 Ответ

1 голос
/ 18 января 2020

Используйте ORDER BY и LIMIT, чтобы указать, сколько строк нужно выбрать.

$stmt = $conn->prepare("
    SELECT id, title, filename, date, content 
    FROM blogs 
    WHERE id > :id
    ORDER BY id
    LIMIT 4");
$stmt->execute([':id' => $id]);
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);

$posts будет двухмерным массивом со всеми данными для следующих 4 сообщений.

Это не будет проблемой, если значения id не являются последовательными, как ваш код. Это может произойти, если сообщения будут удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...