Was sollte der beste Weg sein, die folgenden mySQL-Abfragen zusammenzuführen? Sollte es zu komplex werden? Ich möchte die Ergebnisse nach der match_score genau wie in der ersten Abfrage sortieren. Ich habe gehört, dass es eine Union-Option gibt, um mehrere Select-Abfragen zu verbinden, nicht sicher, wie es funktioniert, aber gibt es keine Möglichkeit, die 3 Abfragen unter einer Select-Abfrage zusammenzuführen? Vielen Dank für Ihre Zeit.Wie kann ich diese mySQL-Abfragen zusammenführen
Abfrage 1:
SELECT
ui.User_ID,
TRUNCATE(COUNT(*)/2, 1) + COUNT(my.interest_id) * 2.5 AS match_score
FROM
User_Interests ui
LEFT JOIN
User_Interests my ON (my.user_id = ?
AND my.interest_id = ui.interest_id)
GROUP BY ui.user_id
ORDER BY match_score DESC
Abfrage 2:
SELECT
ud.User_ID,
TRUNCATE(COUNT(*)/2, 1) + COUNT(my.dislike_id) * 2.5 AS match_score
FROM
User_Dislikes ud
LEFT JOIN
User_Dislikes my ON (my.user_id = ?
AND my.dislike_id = ud.dislike_id)
GROUP BY ud.user_id
ORDER BY match_score DESC
Abfrage 3:
SELECT
u.*
FROM
User u
LEFT JOIN
User_Status us ON u.id = User_ID1 AND us.User_ID2 = 5
WHERE
gender = ?
AND (us.Status != 'FRIENDS'
OR us.status IS NULL)
AND u.birthday >= DATE(NOW()) - INTERVAL ? YEAR - INTERVAL 1 YEAR
AND u.birthday < DATE(NOW()) - INTERVAL ? YEAR
Was ist der äußere Join in der dritten Abfrage für? Es scheint mir überhaupt keine Wirkung zu haben. Sie finden entweder einen Nicht-Freund-Datensatz für einen Benutzer auf Benutzer 5 oder nicht, aber Sie wählen den Benutzer unabhängig aus. (Ich nehme an, dass User_ID1 + User_ID2 in User_Status eindeutig sind. Andernfalls würde der Join Ergebnisdatensätze duplizieren.) –
Wie User_Status: Der Eintrag User_ID1 = 1, User_ID2 = 5 hat eine andere Bedeutung als User_ID1 = 5, User_ID2 = 1? Oder es ist garantiert, dass für eine Aufzeichnung a | b (z. B. 1 | 5) immer eine Geschwisteraufzeichnung b | a (z. B. 5 | 1) & le; Oder ist keine dieser beiden Aussagen wahr? Wenn letzteres: Möchten Sie nicht auch nach u.id = User_ID2 UND us.User_ID1 = 5 suchen? –
Sie sollten Beispieldaten anzeigen, die von den drei Abfragen zurückgegeben werden, d. H. Einige Zeilen für beispielsweise vier Benutzer, die in einem oder zwei oder drei Ergebnissen vorhanden sind, und das erwartete Ergebnis für die zusammengeführte Abfrage. Da gibt es zwei Punkte: Wonach willst du sortieren? –