Consulta SQL con dos cláusulas “or”
Necesito tu ayuda.
Tengo un problema con una consulta SQL que no puedo hacer.
Tengo dos tablas, “pacientes” y “usuario”, en la tabla “pacientes” tengo los campos “nombre, apellido, personal_id, strikes” y en la tabla “usuario” tengo un campo llamado “estado”. Aclaro, “personal_id” es un código asignado por la empresa, diferente de la clave primaria.
En la lógica del sistema, un usuario puede estar “desactivado” por dos razones.
1.- El administrador colocó el estado del usuario en “Inactivo”
2.- El usuario tiene 3 strikes o más.
Entonces la consulta que estoy intentando hacer es la siguiente.
Dado un “valor”, devuélveme todos los usuarios que coincidan en “personal_id O apellido” Y TAMBIÉN
los usuarios están INACTIVOS (Tanto por la razón 1 como por la razón 2)
$patients = DB::table('pacientes')
->join('usuario', 'pacientes.User_ID', '=', 'usuario.id')
->where('usuario.estado', '=', 'Inactivo')
->orWhere('pacientes.strikes', '>=', 3)
->where('pacientes.apellido', 'like', '%'.$date.'%')
->orWhere('pacientes.personal_id', 'like', '%'.$date.'%')
->get();
Básicamente necesito que mi consulta cumpla con esto:
Esto…
->where(‘usuario.estado’, ‘=’, ‘Inactivo’)
->orWhere(‘pacientes.strikes’, ‘>=’, 3)
Y TAMBIÉN
->where(‘pacientes.apellido’, ‘like’, ‘%’.$date.’%’)
->orWhere(‘pacientes.personal_id’, ‘like’, ‘%’.$date.’%’)
Básicamente, primero extrae “Todos los inactivos” y luego en esa lista busca todas las coincidencias.
davy.ai
Para lograr el resultado deseado, puedes modificar tu consulta SQL existente encerrando las condiciones
OR
dentro de una cláusulawhere
y especificando el orden de los corchetes utilizando cierres anidados. Así es como puedes modificar la consulta:Primero, hemos encerrado las condiciones
OR
parastatus
ystrikes
dentro de un cierre utilizando el métodowhere
. Ahora, solo se considerarán los pacientes que coincidan con una de las dos condiciones.De manera similar, encerramos las condiciones
OR
paralast_name
ypersonal_id
dentro de otro cierre, y utilizamos el métodoorWhere
para comparar los pacientes que tengan cualquiera de los dos valores.Finalmente, utilizamos el método
get
para obtener los registros que coinciden.¡Espero que esto te ayude!