Помочь Переделать запрос к бд

248
18 октября 2021, 21:10

имеется вот такой запрос к базе данных

$list = database::i()->support('user_id = ?', $user_id)->limit('10')->order('created_at DESC');

Он берет последние 10 записей с таблицы support и выводит в виджет, но получается так, что самые последние сообщения оказываются в самом верху, а поле ввода находиться в низу, может кто то сможет помочь соорудить конструкцию подобную этому?

$list = database::query("SELECT * FROM (SELECT * FROM support ORDER BY created_at DESC LIMIT 10) tmp ORDER BY created_at ASC");

Что бы последние записи были выведены циклом последними, а не как первыми.

Всем спасибо!

Answer 1

Вам не нужно делать подобные вещи запросами к БД. Обработка данных должна происходить на контроллере.

Если результат выполнения database::i()->support->... - массив, то просто пройдитесь по нему в обратном порядке:

for ($i = count($list) - 1; $i >= 0; $i--) {
    echo ($list[$i]);
}

Если $list - объект, то советую посмотреть документацию к ORM, которую вы используете, возможно она уже имеет методы для получения строк результата запроса в обратном порядке. Если нет, то, скорее всего, $list реализует интерфейсы \Iterator, \ArrayAccess, \Countable, и вы сможете работать с ним как с массивом.

Если на чистом mysqli, то как то так:

$query = "SELECT * FROM support ORDER BY created_at DESC LIMIT 10";
if ($result = $mysqli->query($query)) {
    $rows_count = $result->num_rows;
    $list = array();
    // Идем по циклу от последней строки к перовй
    for ($i = $rows_count - 1; $i >= 0; $i--) {
        // смещаем указатель на нужную строку
        $result->data_seek($i);
        // получаем строку
        $list[] = $result->fetch_row();
    }
    $result->close();
}
var_dump($list);
READ ALSO
После include header.html появилась 1!

После include header.html появилась 1!

Дабы сократить время верстки множества страниц решил вынести header в отдельный файл, чтобы в indexphp и других страницах призывать его через include

191
public static string Name { get; set } как это строка будет выглядеть в java

public static string Name { get; set } как это строка будет выглядеть в java

Здравствуйте у меня есть строка в C#

185
Почему не устанавливается текст в Label?

Почему не устанавливается текст в Label?

Я пытаюсь сделать приложение по типу счётчика калорий: в первом окне я вписываю текущий рост и вес, а во втором окне в текстовом поле Label я должен...

306