Ну, мой лучший запрос выглядит так:
SELECT DISTINCT appointment_customer_services.appointment_id,
concat_ws(' ', customers.last_name, customers.first_name) AS 'customer',
services.name AS 'service',
customers.status,
appointment_customer_services.is_booking,
SUM(services.cost) AS 'cost',
appointments_schedule.datetime_from AS 'datetime_from',
appointments_schedule.datetime_to AS 'datetime_to'
FROM `appointment_customer_services`
JOIN customers
ON customers.id = appointment_customer_services.customer_id
JOIN services
ON services.id = appointment_customer_services.service_id
JOIN appointments_schedule
ON appointments_schedule.appointment_id = appointment_customer_services.appointment_id
WHERE appointments_schedule.datetime_from > CURRENT_TIMESTAMP
GROUP BY customers.last_name,
services.name,
appointments_schedule.datetime_from
ORDER BY appointments_schedule.appointment_id
На самом деле это первый запрос, который я создал в начале, но я не смог отформатировать выходной массив, чтобы заполнить свою внешнюю таблицу, пока я ' я показывал вам выше.
Кроме того, в нем много повторяющихся данных, которые я не считаю хорошей практикой, верно? Но в то же время я не могу думать ни о каком другом.
Array
(
[0] => Array
(
[appointment_id] => 1
[customer] => lady
[service] => service1
[status] => 1
[is_booking] => 1
[cost] => 7
[datetime_from] => 2020-05-06 12:00:00
[datetime_to] => 2020-05-06 17:00:00
)
[1] => Array
(
[appointment_id] => 1
[customer] => lady
[service] => service1
[status] => 1
[is_booking] => 1
[cost] => 7
[datetime_from] => 2020-05-30 17:00:00
[datetime_to] => 2020-05-30 20:00:00
)
[2] => Array
(
[appointment_id] => 2
[customer] => nikole
[service] => service1
[status] => 1
[is_booking] => 1
[cost] => 50
[datetime_from] => 2020-05-29 14:00:00
[datetime_to] => 2020-05-29 16:00:00
)
[3] => Array
(
[appointment_id] => 2
[customer] => nikole
[service] => service2
[status] => 1
[is_booking] => 1
[cost] => 7
[datetime_from] => 2020-05-29 14:00:00
[datetime_to] => 2020-05-29 16:00:00
)
[4] => Array
(
[appointment_id] => 2
[customer] => nikole
[service] => service3
[status] => 1
[is_booking] => 1
[cost] => 240
[datetime_from] => 2020-05-29 14:00:00
[datetime_to] => 2020-05-29 16:00:00
)
[5] => Array
(
[appointment_id] => 3
[customer] => jennifer
[service] => service1
[status] => 1
[is_booking] => 1
[cost] => 35
[datetime_from] => 2020-05-28 15:00:00
[datetime_to] => 2020-05-28 17:00:00
)
[6] => Array
(
[appointment_id] => 3
[customer] => jennifer
[service] => service2
[status] => 1
[is_booking] => 1
[cost] => 240
[datetime_from] => 2020-05-28 15:00:00
[datetime_to] => 2020-05-28 17:00:00
)
[7] => Array
(
[appointment_id] => 3
[customer] => jennifer
[service] => service3
[status] => 1
[is_booking] => 1
[cost] => 30
[datetime_from] => 2020-05-28 15:00:00
[datetime_to] => 2020-05-28 17:00:00
)
[8] => Array
(
[appointment_id] => 3
[customer] => joey
[service] => service1
[status] => 1
[is_booking] => 0
[cost] => 50
[datetime_from] => 2020-05-28 15:00:00
[datetime_to] => 2020-05-28 17:00:00
)
[9] => Array
(
[appointment_id] => 3
[customer] => joey
[service] => service2
[status] => 1
[is_booking] => 0
[cost] => 7
[datetime_from] => 2020-05-28 15:00:00
[datetime_to] => 2020-05-28 17:00:00
)
[10] => Array
(
[appointment_id] => 3
[customer] => Aniston
[service] => service1
[status] => 1
[is_booking] => 0
[cost] => 240
[datetime_from] => 2020-05-28 15:00:00
[datetime_to] => 2020-05-28 17:00:00
)
)
Если вы видите, что я получаю несколько массивов для каждой встречи , с большинством элементов, которые будут одинаковыми , Основное различие заключается либо в клиенте, либо в услуге, либо в дате и от.
Так что, если для assign_id = 1, есть только один клиент, но две службы, создается новый массив со всеми дублированными данными, но есть вторая служба для той же встречи для того же клиента. Разве не было бы правильно иметь только один массив для каждой встречи с вложенными массивами для охвата объекта (клиенты, услуги клиента, даты и т. Д. c), точно такой же, как формат, который мне нужен для заполнения входной таблицы?
Итак, теперь мне нужно извлечь данные из этого массива и создать новый в нужном мне формате, чтобы можно было заполнить таблицу на внешнем интерфейсе, но это кажется невозможным ...
И у меня будет два массива с одинаковым объемом данных, не будет ли это использовать больше памяти? что такое ложная практика? Идея, которая пришла мне в голову, состоит в том, чтобы удалить данные для каждой встречи из исходного массива, как только они будут скопированы в новый массив. Но все эти процессы звучат как ..... ненужная сложность? Я не знаю, что мне не хватает.
Я также пытался получить всю информацию для каждой встречи в одной строке / массиве с помощью group_concat (s), чтобы создать вывод типа:
appointment_id customers+services datetimes
1 | customer1: 1,1,service1,service2,services, customer2:.... |datetime1,datetime2
но тоже не было go, информации стало слишком много, и я даже не смог создать такой вывод, я застрял со всеми услугами каждого приема, но я не мог определить, какие пункты обслуживания к какому клиенту ...
И, наконец, еще один вопрос, который возник, заключается в том, стоит ли мне рассчитывать стоимость каждой встречи (поскольку мне нужна сумма, чтобы сократить количество встреч от самых дорогих до самых дешевых. ) на уровне приложения с PHP или, если это будет сделано на уровне дБ с mysql.
Еще раз спасибо за ваше внимание!