2016-10-17 1 views
5

Wählen Sie eine Gruppe, wo man Haupt ist und zum Beispiel 5Niederlassung. Also, die Gesamtzahl der Orte ist 6. Suchen Sie in jedem dieser 6 nach 3 Arbeiter, die als job_types LIKE "%C%" arbeitet. Wenn in einem dieser 6 Orte 3 Worker mit gegebenem Parameter sind, muss die Abfrage Ergebnisse von all diesen 6 Orten erhalten.Graf Arbeiter in Unternehmen mit Niederlassungen

Zur Klarstellung:3 Arbeiter müssen in der gleichen Haupt/Zweig arbeiten.

Weil Projekt selbst sehr dificult ist, wäre es besser, sein Ergebnis RAW Abfrage zu erhalten mit:

Business-Tabelle

id  | mainorbranch | name 
-------------------------------------- 
1   Main     Apple 
2   Branch    Apple London 
3   Branch    Apple Manchester 
4   Main     IBM 
5   Branch    IBM London 
etc ... 

Beziehung

business_branches Tisch

b_id  | branch_id | id 
-------------------------------------- 
1    1     1 
2    2     1 
3    3     1 
4    4     4 
5    5     4 
// etc 

people_details Tisch

d_id  | id | job_types 
-------------------------------------- 
1    1   C 
2    3   D 
3    2   F 
4    4   C 
5    5   C 
// etc 

people_branches Tisch

pb_id  | branch_id | id 
-------------------------------------- 
1    1     3 
2    3     2 
3    4     4 
4    2     5 
5    1     1 
// etc 

Was ich bekommen müssen:

Business id | Name | Postcode 
----------------------------------------- 
1     Apple  postcode 
2     Apple 232 postcode 
3     Apple 323 postcode 
// etc... 

DB-Struktur für Helfer http://sqlfiddle.com/#!9/206733

Simplified, minified SQL file with total of 110k+ rows

UPDATE

Antwort von @KikiTheOne irgendwie funktioniert, aber es wird nur eine halbe Ergebnisse. Andere Hälfte fehlt.

+1

Sorry, ich hier bin verloren. –

+2

Diese Frage ist verschlagwortet mit Laravel; erwarten Sie Hilfe in Query Builder oder Eloquent? Wenn Sie nicht sind, sollte wahrscheinlich Laravel-Tag entfernen. – JofryHS

+0

@RichardHousham zum Beispiel gibt es eine Gruppe von 1 Haupt- und 3 Zweigen. Suche nach 3 '' "% C%" '' an jeder von 4 Stellen. Wenn '' true'', zeigen Sie alle Informationen dieser 4 Orte an. (1main, 3 Zweige). – Tauras

Antwort

3

wie in Chat diskutiert. Hier ist eine Lösung:

Wenn Sie Firmeninformationen benötigen ... Holen Sie sie @ t1.XXXX wie postcode.

i geändert

"pb_id" "branch_id" "id" 
"1" "1" "3" 
"2" "3" "2" 
"3" "1" "4" 
"4" "1" "5" 
"5" "1" "1" 

so bekomme ich 3 Personen in 1 Zweig

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 

Erläuterung:

-.1 das innerste SQL Zählt ALLE Zweige mit Arbeitern (Anzahl der Worker-Init) und Job_type =% c% und verbindet die MAIN-ID des Zweigs.

± 2 die zweite SQL bekommt, dass Informationen und wählt nur alle Zweige mit den Arbeitern> = 3

± 3 die äußere SQL wählt alle inneren und gibt INFOS Alle Branchen/Haupt mit dem branchID-Main zurück aus das Innere SQL. UND verbindet sie mit der Business-Tabelle, so dass Sie alle Infos wie Postleitzahl von dort

1

hoffe, dass dies funktioniert, da es nicht so einfach ist, die Beziehungen mit dem Namen der Spalten in Ihrer Frage zu interpretieren.

Mit diesem Skript können Sie jede Gruppe von Haupt/Filiale hinzufügen suchen in

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 
)