За последние 24 часа нас посетили 22565 программистов и 1138 роботов. Сейчас ищут 634 программиста ...

Возвращение COUNT и массив данных

Тема в разделе "PHP и базы данных", создана пользователем Ion Prodan, 2 июл 2019.

Метки:
  1. Ion Prodan

    Ion Prodan Новичок

    С нами с:
    21 мар 2018
    Сообщения:
    7
    Симпатии:
    1
    День добрый! На данный момент есть SQL запрос который возвращает массив с данными в JSON
    Код (Text):
    1. [
    2.   {
    3.     "id": "114",
    4.     "url": "1181749",
    5.     "published": "2019-06-16 17:06:22",
    6.     "modified": null,
    7.     ...
    8.   },
    9.   {},
    10.   {}
    11. ]
    Решил создать пагинацию на стороне клиента (ReactJS), а для этого нужно знать сколько записей в таблице, и получить что-то вроде этого:
    Код (Text):
    1. {
    2.   "total": 46,
    3.   [
    4.     {
    5.       "id": "114",
    6.       "url": "1181749",
    7.       "published": "2019-06-16 17:06:22",
    8.       "modified": null,
    9.       ...
    10.     },
    11.     {},
    12.     {}
    13.   ]
    14. }
    Написал запрос (пример по сылке), но получаю total в каждой записи в массиве

    https://www.db-fiddle.com/f/moxNtNVFRkdNX4vy5fbp5B/1

    Код (Text):
    1. {
    2.   [
    3.     {
    4.       "total": "46",
    5.       "id": "114",
    6.       "url": "1181749",
    7.       "published": "2019-06-16 17:06:22",
    8.       "modified": null,
    9.       ...
    10.     },
    11.     {},
    12.     {}
    13.   ]
    Как можно решить данную проблему? Заранее спасибо!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    Что на счет UNION ?
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    @Ion Prodan Ты неправильно пользуешься db-fiddle. Подразумевается что в первом текстовом поле (Schema SQL) создаются таблицы и заполняются тестовыми данными, а ты туда воткнул select который по-идее должен быть во втором поле (Query SQL) А так ему неоткуда брать данные.
    Таким манером ты мог бы сразу на форум выложить текст запроса --результат тот же, но по ссылке не надо ходить.

    Короче, чтобы получить общее количество записей надо выполнить отдельный запрос с COUNT(*), а не подзапрос.
    Затем делается запрос пачки записей с LIMIT m, n. Так устроена пагинация. Посмотри примеры, их миллион.
     
  4. Ion Prodan

    Ion Prodan Новичок

    С нами с:
    21 мар 2018
    Сообщения:
    7
    Симпатии:
    1
    Про db-fiddle спасибо, первый раз вчера пользовался, так что не знал как правильно.

    Решил проблему добавив ещё один запрос, а потом возвращаю JSON как-то так:

    Код (Text):
    1. $data->items = $items;
    2. $data->total = $total2;
    3. echo json_encode($data);
    Хотя, по какой-то причине ругается
    Код (Text):
    1. Creating default object from empty value in $data->items = $items;
    Пока что просто добавил @ в начале строки, а дальше уже посмотрим как исправить. Спасибо за помощь!