Als jemand, der ständig Probleme mit Datenbanken hat, versuche ich nach einer Lösung zu suchen, die meine Datenbankaufrufe optimiert. Szenario ist dies, ich versuche, alle Zeilen von Elementen direkt im Besitz des Benutzers zu erhalten, aber ich möchte auch die Zeilen von Elementen abrufen, wo die Benutzerrollen als Gast fungiert. Meine aktuelle Anfrage funktioniert, aber ich denke, es ist nicht die beste Lösung für das, was ich erreichen möchte. Diese erhalten Sie mir die Ergebnisse, die ich will, aber ich fürchte, wenn es Hunderte von Zeilen sind diese schrecklich langsam bekommenJoin verschiedene WHERE-Klauseln auf mySQL multiple Select-Anweisung
set @UsrId = 23;
(SELECT Eventos.Fecha, Eventos.InformacionDelEvento, Eventos.PosicionGpsSiNo, Eventos.InformacionGps, Dispositivos.Nombre, CatalogoDeEventos.Descripcion
FROM Eventos, CatalogoDeEventos, Dispositivos, DispositivosxUsuario
WHERE Eventos.IdEvento = CatalogoDeEventos.Id
AND Dispositivos.IdentificadorUnico = Eventos.IdDispositivo
AND DispositivosxUsuario.IdDispositivo = Dispositivos.Id
AND Dispositivos.Invisible = 0
AND DispositivosxUsuario.IdUsuario = @UsrId
ORDER BY Fecha DESC)
UNION
(SELECT Eventos.Fecha, Eventos.InformacionDelEvento, Eventos.PosicionGpsSiNo, Eventos.InformacionGps, Dispositivos.Nombre, CatalogoDeEventos.Descripcion
FROM Eventos, CatalogoDeEventos, Dispositivos, DispositivosxUsuario, Seguidores
WHERE Eventos.IdEvento = CatalogoDeEventos.Id
AND Dispositivos.IdentificadorUnico = Eventos.IdDispositivo
AND DispositivosxUsuario.IdDispositivo = Dispositivos.Id
AND Dispositivos.Invisible = 0
AND Seguidores.IdUsuario = DispositivosxUsuario.IdUsuario
AND Seguidores.IdSeguidor = @UsrId
ORDER BY Fecha DESC)
Also beide Abfragen haben diese gleichen Block
SELECT Eventos.Fecha, Eventos.InformacionDelEvento, Eventos.PosicionGpsSiNo, Eventos.InformacionGps, Dispositivos.Nombre, CatalogoDeEventos.Descripcion
FROM Eventos, CatalogoDeEventos, Dispositivos, DispositivosxUsuario
WHERE Eventos.IdEvento = CatalogoDeEventos.Id
AND Dispositivos.IdentificadorUnico = Eventos.IdDispositivo
AND DispositivosxUsuario.IdDispositivo = Dispositivos.Id
AND Dispositivos.Invisible = 0
Sie auf den Linien darüber abweichen , bisher habe ich keinen Weg, um die beiden Ergebnisse auf einem einzigen Aufruf
verwenden moderne 'JOIN' Join-Syntax, anstatt eine Abfrage Stil, der vor 20 Jahren veraltet war; es würde es offensichtlich machen, dass Sie wahrscheinlich 'LINKE VERBINDEN Sequidores' – Uueerdo
@Uueerdo Ich lerne immer noch Datenbanken, wenn Sie können Sie mich Dokumentation (oder Beispiele) verknüpfen, habe ich versucht, die Oracle zu lesen, aber ich bin immer noch zu Neuling um es vollständig zu verstehen –
Ich ging voran und schrieb die Abfrage mit der neueren Joinsyntax neu. @Uueerdo hat Recht, es ist viel einfacher zu lesen. – nlloyd