2017-01-11 3 views
0

ich einige Probleme mit dem folgenden Problem hat, wird Ihnen zeigen, was ich habe, was ich will und was ich versucht habe ...wählen subquery für Kindertisch

Was ich will: Ich habe ein Elternteil und Kind Tabelle, die Mutter ist

Besuche

und das Kind Tabelle ist

Einschätzungen

, gibt es eine Eins-zu viele Beziehung zwischen den beiden definierten Tabellenstruktur siehe unten:

SELECT 
VisitPk, (Primary Key) 
ClientFk, 
ClientSiteFk, 
AssessorFk, 
VisitStartDate, 
VisitEndDate, 
CONCAT(MONTHNAME(TargetDate), ' ', YEAR(TargetDate)) AS TargetMonth, 
Duration, 
VisitStatus, 
TargetDate, 
`Long`, 
Lat, 
VisitPlanRequired, 
VisitPlanIssued, 
VisitPlanStatus, 
VisitPlanAttachment, 
DATE_SUB(VisitStartDate, INTERVAL 1 Month) AS VisitPlanDue, 
Overnight, 
YEAR(TargetDate) AS `Year` 
FROM visits 
ORDER BY YEAR(TargetDate) DESC, TargetDate, VisitStartDate 

und

SELECT 
assessments.AssessmentPk, (Foreign Key) 
assessments.VisitFk, 
assessments.`Scope`, 
FROM assessments 

Was ich brauche ist ein Feld in die Bewertung zu setzen Tabelle, so dass es alle Bereiche der Besuchstabelle nachschlägt und sie dann gruppiert. E.G ist visit pk 1 hat zwei Einträge 3 untergeordnete Datensätze, 1, 2 und 3, id möchte eine concat/implode-Funktion verwenden, um es als 1,2,3 in der übergeordneten Tabelle anzuzeigen.

Ich könnte dies mit PHP und physisch speichern Sie die Daten in der Tabelle, aber ich würde es vorziehen, diese Route nicht zu gehen.

Ich habe versucht, eine zweite Select-Anweisung in der ersten Select-Anweisung zu haben, um eine Unterabfrage auszuführen, aber kommt nicht einmal nahe.

Ich habe auch dieses exmaple auf gefunden versucht, mit: Can I concatenate multiple MySQL rows into one field?, zB:

SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') 
FROM peoples_hobbies GROUP BY person_id 

Letztlich, was ich brauche, ist für jemanden, der mir zu sagen, wie ich eine zweite SELECT-Anweisung unter Verwendung der oben group_contact Beispiel platzieren können aber indem Sie den Kindertisch nachschlagen, wo assessmentfk = assessmentpk.

So etwas wie:

SELECT 
VisitPk, (Primary Key) 
ClientFk, 
ClientSiteFk, 
**CONCAT(SELECT `scope` from assessments LEFT OUTER JOIN assessments ON visits.VisitPk = assessments.VisitFk) as `Scope`** 
AssessorFk, 
VisitStartDate, 
VisitEndDate, 
CONCAT(MONTHNAME(TargetDate), ' ', YEAR(TargetDate)) AS TargetMonth, 
Duration, 
VisitStatus, 
TargetDate, 
`Long`, 
Lat, 
VisitPlanRequired, 
VisitPlanIssued, 
VisitPlanStatus, 
VisitPlanAttachment, 
DATE_SUB(VisitStartDate, INTERVAL 1 Month) AS VisitPlanDue, 
Overnight, 
YEAR(TargetDate) AS `Year` 
FROM visits 
ORDER BY YEAR(TargetDate) DESC, TargetDate, VisitStartDate 

Ich hoffe, dass dies Sinn macht und dass jemand helfen kann, ist dies weit über alles, was ich so Entschuldigungen im Voraus in der Vergangenheit getan haben.

+0

ich auch versucht habe (SELECT GROUP_CONCAT ('scope' SEPARATOR '') aus den Einschätzungen LEFT OUTER JOIN Einschätzungen ON visits.VisitPk = assessments.VisitFk GROUP Nach 'scope') als' Scope', – jaykay79

+0

und group_concat ('Scope') als Standards aus Assessments, in denen visits.VisitPk = assessments.VisitFk, – jaykay79

Antwort

0

versuchen innere Verknüpfung von zwei Tabellen und Gruppe von

 SELECT 
      VisitPk, ClientFk, ClientSiteFk,AssessorFk,VisitStartDate, VisitEndDate, 
      GROUP_CONCAT(a.scope, ',') as scopes 
      CONCAT(MONTHNAME(TargetDate), ' ', YEAR(TargetDate)) AS TargetMonth, 
      Duration,VisitStatus,TargetDate,`Long`,Lat,VisitPlanRequired, 
      VisitPlanIssued,VisitPlanStatus,VisitPlanAttachment, 
      DATE_SUB(VisitStartDate, INTERVAL 1 Month) AS VisitPlanDue, 
      Overnight,YEAR(TargetDate) AS `Year` 
    FROM visits v 
    INNER JOIN assessments a 
    ON v.VisitPk = a. VisitFk 
    GROUP BY v.VisitPk 
    ORDER BY YEAR(TargetDate) DESC, TargetDate, VisitStartDate