PHP SELECT / Показать последние [количество] элементов, вставленных в базу данных - PullRequest
1 голос
/ 27 апреля 2020

В моей БД у меня есть несколько «документов», которые содержат больше элементов, я вставляю их из своей панели инструментов.

При отображении метод ; требует значения в моем случае это $id. Сейчас я использую rand() с жестко заданным диапазоном для отображения разных «документов».

Вот как это выглядит :

        <?php

        $num = rand(1,10);
        $post->showSmallPost($num);

        ?>

Допустим, Я хочу иметь три из них на странице HTML. Но вместо этого rand() я хочу показать последние три идентификатора, импортированные в таблицу. Так что это мой вопрос, как это сделать?

Это метод showSmallPost():

public function showSmallPost($id){

    $connection = new Db();
    $conn = $connection->connect();

    $image = new Image();
    $imgC = $image->showSmallImg($id);

    $query = $conn->prepare("SELECT * FROM post WHERE id = ?");
    $query->bind_param('i', $id);

    $query->execute();

    $result = $query->get_result();

    if($result->num_rows > 0) {

        if ($row = $result->fetch_assoc()) {

            $this->id = $row['id'];
            $this->title = $row['title'];
            $this->description = $row['description'];

            echo "<div class=\"col-md-4 text-center\" style=\"margin-top: 5px;\">";

            echo <<<EOT

                    <a href="news.php?post=$id">
                        $imgC
                    </a>

                    <h4 class="news-title">$this->title</h4>
                    <p class="news-para">$this->description</p>

                EOT;

            echo "</div>";

        }

    }

}

И да, этот showSmallImg() просто выполняет свою работу.

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Вы можете выбрать последний идентификатор из базы данных и создать для l oop, уменьшая его.

    $query = $conn->prepare("SELECT MAX(id) AS last_id FROM post");
    $query->execute();
    $result = $query->get_result();
    $row = $result->fetch_assoc();
    $lastId = $row['last_id'];

    for ($i = $lastId; $i > $lastId - 3; $i--)
    {
        $post->showSmallPost($i);
    }

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

    $query = $conn->prepare("SELECT id FROM post ORDER BY id DESC LIMIT 3");
    $query->execute();
    $result = $query->get_result();
    $row = $result->fetch_assoc();

    while ($row = $result->fetch_assoc())
    {
        $post->showSmallPost($row['id']);
    }
1 голос
/ 27 апреля 2020

Вы можете просто добавить сортировку в запрос. Вам не нужно передавать случайную $id в функцию. Вы можете изменить оператор SQL на:

$query = $conn->prepare("SELECT * FROM post ORDER BY id DESC LIMIT 0,1");

Также вы можете получить 3 документа в одном запросе с помощью,

$query = $conn->prepare("SELECT * FROM post ORDER BY id DESC LIMIT 0,3");

. Вы даже можете оптимизировать запрос, чтобы он выполнялся быстрее,

$query = $conn->prepare("SELECT id, title, description FROM post ORDER BY id DESC LIMIT 0,3");

Кроме того, вместо использования HTML внутри echo, вы можете создать многомерный массив предпочитаемой структуры или использовать тот, который возвращает запрос sql. И используйте метод foreach и печатайте значения только внутри массива с PHP и оставляйте HTML как есть.

Будет генерироваться более чистый код.

Например:

<div class=col-md-4 text-center" style="margin-top: 5px;">
    <a href="news.php?post=<?php echo $id; ?>"><?php echo $imgC; ?></a>
    <h4 class="news-title"><?php echo $this->title; ?></h4>
    <p class="news-para"><?php echo $this->description ?></p>
</div>
0 голосов
/ 27 апреля 2020

Если я правильно понимаю, тогда вы хотите получить последние n записей из таблицы и для этого вам нужно иметь поле типа createdAt. Затем вы можете написать запрос, который будет извлекать n записей и результат заказа по этому полю createdAt в порядке убывания.

Ваш запрос будет выглядеть примерно так:

select * from posts order by createdAt desc limit 5;

Это будет дать вам 5 последних записей, вставленных в таблицу.

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