Ich bin ziemlich dumm (!), Aber kann nicht den besten Weg, um eine Abfrage für mysql zu schreiben und dachte, ich würde es hier posten, um zu sehen, ob jemand helfen kann (fyi ich benutze PHP). Ich habe 5 Tabellen:Wie zwei mysql-Abfragen effizient zusammengeführt werden, um übereinstimmende Datensätze zurückzugeben?
TUsers (ID, Name)
TJobTypes (ID, Name)
TJobs (ID, JobTypeID, JobName)
TJobsRequested (ID, JobID, UserID)
TJobsOffered (ID, JobID, UserID)
FYI TJobsTypes zu TJobs ist eine Eins-zu-Beziehung.
Benutzer können nach Job-Swaps suchen, basierend auf Jobs, die sie ausführen können, und Jobs, die benötigt/angeboten werden. Wenn User1 also sucht und sagt, dass er "JobA" machen muss und "JobB" anbieten kann und User2 als JobB aufgeführt ist und "JobA" anbieten kann, dann wäre das eine Übereinstimmung. Wenn User2 JobB benötigt, aber JobA nicht anbieten kann, ist es keine Übereinstimmung. Es ist einfach genug, eine Abfrage zu schreiben, um diese korrekt abzugleichen. Benutzer müssen jedoch auch in der Lage sein, basierend auf dem allgemeinen Jobtyp (im Gegensatz zu bestimmten Jobs) zu suchen.
Wenn also UserA sucht: 'benötigt JobTypeA' und 'kann JobTypeB' anbieten, dann sollten die Matches alle Benutzer sein, die einen Job in der JobTypeA Kategorie haben und einen Job in der JobTypeB Kategorie haben (wenn das Sinn macht!)
Wenn Sie nur einen Weg rund um die Suche (zB zeigen alle Benutzer, die einen Job als um innerhalb Jobtype = $ typecanhelp aufgeführt sind), dann dies ist ganz einfach und kann ähnlich wie geschehen:
SELECT DISTINCT TUsers.Fid, TUsers.FUsername, TUsers.FGender
FROM TUsers, TJobsRequested, TJobs, TJobTypes
WHERE TJobTypes.Fid='$typecanhelp'
AND TJobs.FJobTypeID=TJobTypes.Fid
AND TJobs.Fid=TJobsRequested.FJobID
AND TUsers.Fid=TJobsRequested.FUserID
ORDER BY TUsers.Fid
ODER (um alle Benutzer anzuzeigen, die einen Job mit JobType = $ typeedhelp anbieten):
Ich kann jedoch nicht herausfinden, wie Sie die beiden zusammenführen, da sie die gleichen Basistabellen (TJobs und TJobTypes) verwenden. Könnte mir jemand in die richtige Richtung zeigen, wie die obigen beiden Abfragen zusammengeführt werden, damit Benutzer zurückgegeben werden, die einen Job mit JobType == $ jobcanhelp anbieten und Jobs mit JobType = $ jobsneedhelp benötigen?
Ich zähle 5 Tabellen, nicht 4. –
Unterstützt MySQL (nichtrekursive) CTEs? – wildplasser
@SalmanA: Sie sind richtig, ich habe 4 anstelle von 5, ich habe dies aktualisiert :) – deshg