#php #mysql #laravel #count
#php #mysql #laravel #подсчет
Вопрос:
Выберите группу, в которой есть один Основной и, например, 5
Филиал. Итак, общее количество мест таково 6
. В каждом из них 6
ищите 3
работников, которые работают как job_types LIKE "%C%"
. Если в одном из этих 6
мест находятся 3
рабочие с заданным параметром, запрос должен получить результаты по всем этим 6
местам.
Чтобы уточнить: 3
работники должны работать в одном главном / филиале.
Поскольку сам проект очень сложен, было бы лучше получить результаты, используя НЕОБРАБОТАННЫЙ запрос:
деловой стол
id | mainorbranch | name
--------------------------------------
1 Main Apple
2 Branch Apple London
3 Branch Apple Manchester
4 Main IBM
5 Branch IBM London
etc ...
Отношения
таблица business_branches
b_id | branch_id | id
--------------------------------------
1 1 1
2 2 1
3 3 1
4 4 4
5 5 4
// etc
таблица people_details
d_id | id | job_types
--------------------------------------
1 1 C
2 3 D
3 2 F
4 4 C
5 5 C
// etc
таблица people_branches
pb_id | branch_id | id
--------------------------------------
1 1 3
2 3 2
3 4 4
4 2 5
5 1 1
// etc
Что мне нужно получить:
Business id | Name | Postcode
-----------------------------------------
1 Apple postcode
2 Apple 232 postcode
3 Apple 323 postcode
// etc...
Структура БД для Помощников
http://sqlfiddle.com /#!9/206733
Упрощенный, уменьшенный SQL-файл с общим количеством строк более 110 тыс.
Обновить
Ответ от @KikiTheOne вроде как работает, но дает только половину результата. Другая половина отсутствует.
Комментарии:
1. Извини, что я здесь заблудился.
2. Этот вопрос помечен как Laravel; вы ожидаете помощи в построителе запросов или Eloquent? Если это не так, вероятно, следует удалить тег Laravel.
3. @RichardHousham например, существует группа из 1 основного и 3 филиалов. Найдите 3
"%C%"
в каждом из 4 мест. Еслиtrue
, отобразите всю информацию об этих 4 местах. (1 основная, 3 ветви).4. @JofryHS минутку, пожалуйста.
5. обновлен вопрос @JofryHS.
Ответ №1:
как обсуждалось в чате. вот такое решение:
если вам нужна информация о компании… получите их @ t1.XXXX как postcode
.
я изменился
"pb_id" "branch_id" "id"
"1" "1" "3"
"2" "3" "2"
"3" "1" "4"
"4" "1" "5"
"5" "1" "1"
итак, я получаю 3 человека в 1 филиале
SELECT
t1.id as "Business id",
t1.name as Name,
'postcode' as "Postcode"
FROM SO_business as t1 inner join
(
SELECT * FROM SO_busness_branches as t3
inner join
(
SELECT
t5.branch_id as inner_branch,
count(t5.branch_id) as workers_in,
max(t6.job_types) as job_types,
max(t7.id) as mainbranch
FROM
SO_people_branches as t5
inner join SO_people_details as t6
on t5.id = t6.id
inner join SO_busness_branches as t7
on t5.branch_id = t7.branch_id
WHERE
t6.job_types LIKE '%C%'
GROUP BY
t5.branch_id
) as t4
on t3.id = t4.inner_branch
WHERE t4.workers_in >= 3
) as t2
on t1.id = t2.branch_id
Объяснение:
-.1 Самый внутренний SQL подсчитывает ВСЕ ветви с рабочими (количество инициализированных рабочих) и Job_type = %c% и присоединяет ОСНОВНОЙ идентификатор ветки.
-.2 второй SQL получает эту информацию и выбирает только все ветви с рабочими>= 3
-.3 внешний SQL выбирает всю внутреннюю информацию и возвращает ВСЕ ветви / main с BranchId-Main из внутреннего SQL. И подключает их к бизнес-таблице, чтобы вы могли отображать всю информацию, например postcode, оттуда
Ответ №2:
надеюсь, что это сработает, поскольку не так просто интерпретировать отношения с именем столбцов в вашем вопросе.
С помощью этого скрипта вы можете добавить любую группу main / branch для поиска в
SELECT b.id, b.name, 'postcode' as postcode
FROM business b
INNER JOIN business_branches bb ON (bb.branch_id = b.id)
WHERE bb.id IN (
SELECT bb1.id FROM people_details pd
INNER JOIN people_branches pb ON (pb.id = pd.id)
INNER JOIN business_branches bb1 ON (bb1.branch_id = pb.branch_id)
INNER JOIN business b1 ON (b1.id = bb1.branch_id)
WHERE
pd.job_types like '%C%' AND
bb1.id IN (1,4) -- You can add as many group of businesses (main/branch combinations) using the main branch key
GROUP BY pb.branch_id HAVING count(pb.branch_id) >= 3
)