作爲一個經常遇到數據庫問題的人,我試圖尋找一種解決方案來優化我的數據庫調用。情景是這樣的,我試圖獲取用戶直接擁有的所有行項目,但我也想獲取用戶角色充當訪客的項目行。我目前的查詢工作,但我認爲這不是我想要實現的最好的僞造解決方案。這使我得到我想要的結果,但我當有數百行,這將得到非常緩慢在mySQL多選語句中加入不同的WHERE子句
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)
所以這兩個查詢具有此相同的塊
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
他們上面這行不同的恐懼,到目前爲止,我還沒有想出一個單一的電話獲取兩個結果的方式
運用現代'JOIN'語法,而不是20年前已經過時的查詢風格;它會使它很明顯,你可能會''LEFT JOIN Sequidores' – Uueerdo
@Uererdo我還在學習數據庫,如果你能連接我的文檔(或例子),我已經嘗試閱讀甲骨文的,但我仍然太新手了充分理解它 –
我繼續並使用較新的連接語法重新編寫查詢。 @Uueerdo是對的,閱讀起來更容易。 – nlloyd