За последние 24 часа нас посетили 22510 программистов и 1004 робота. Сейчас ищут 725 программистов ...

count(*) в пагинации

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

Метки:
  1. Shenku

    Shenku Новичок

    С нами с:
    12 июл 2019
    Сообщения:
    3
    Симпатии:
    0
    Доброго времени суток!

    Как правильней вывести количество записей для пагинации
    Есть таблица users с 50 пользователями, таблица email где к каждому пользователю привязано по 2 мыла:

    и если "SELECT count(*) FROM users" даёт 50? то:
    "SELECT count(*) FROM users AS t1
    LEFT JOIN email AS t2 ON t2.user_id = t1.id" даст 100

    но для пагинации нужно 50, как сделать правильней ? GROUP BY ?
    Заранее благодарю за уделенное время
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    а тебе что нужно самому количество пользователей, или количество мыла у всех пользователей?
     
  3. Shenku

    Shenku Новичок

    С нами с:
    12 июл 2019
    Сообщения:
    3
    Симпатии:
    0
    мне нужен в итоге вывод пользователей, аля:
    PHP:
    1. 'name' => 'Петя',
    2. 'emails' => array( 'petya1@mail.ru, petya2@mail.ru' )
    3. ),
    4. 'name' => 'Вася',
    5. 'emails' => array( 'vasya1@mail.ru, vasya2@mail.ru' )
    6. )
    7. )
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. SELECT name, GROUP_CONCAT(emails) as emails
    2. FROM users AS t1
    3. LEFT JOIN email AS t2 ON t2.user_id = t1.id
    4. GROUP BY name
     
    Shenku нравится это.
  5. Shenku

    Shenku Новичок

    С нами с:
    12 июл 2019
    Сообщения:
    3
    Симпатии:
    0
    Спасибо. А если более сложный вариант:
    4 таблицы:
    • orders ( заказы, где name - название )
    • operations ( операции к заказам, множественное )
    • status ( статус операции )
    • avto ( автомобили используемые в операции, множественное )
    Код (Text):
    1. array(
    2.     array(
    3.         'name' => 'Заказ 1',
    4.         'operations' => array(
    5.             array(
    6.                 'name' => 'Операция 1',
    7.                 'status' => 'на модерации',
    8.                 'auto' => array(
    9.                     array(
    10.                         'name' => 'Man',
    11.                         'number' => 'a111aa25'
    12.                     ),
    13.                     array(
    14.                         'name' => 'Volvo',
    15.                         'number' => 'б222бб35'
    16.                     )
    17.                 )
    18.             ),
    19.             array(
    20.                 'name' => 'Операция 2',
    21.                 'status' => 'исполнено',
    22.                 'auto' => array(
    23.                     array(
    24.                         'name' => 'Dav',
    25.                         'number' => 'в333вв45'
    26.                     ),
    27.                     array(
    28.                         'name' => 'Man',
    29.                         'number' => 'д444дд55'
    30.                     )
    31.                 )
    32.             )
    33.         )
    34.     )
    35. );
    опять же с постраничной навигацией, сейчас я делаю первым запросом с группировкой по ID заказа, а второй
    mysqli_fetch_assoc перебираю строки и выстраиваю нужный массив, но что то мне подсказывает что так не совсем верно, в данном случае 1 заказ * 2 операции * 2 машины = 4 строчки, но бывает и гораздо больше и ресурсоемко получается перебрать строки и создать необходимый массив
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Так же group by
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Если вы не будете изобретать отдельный запрос для count , то не будет и проблемы. Делайте всё так же, но вместо перечисления полей count(*) - куда уж проще. :)