select up.profile_id as profileId, r.robot_name as farmname, ifnull(up.profile_id, 2) as profileNull , alert.subject as sub,
u.id as userId, r.created_by as createdBy, f.id as farmId,
from `mydb`.user as u
left join `mydb`.user_profile as up on up.user_id = u.id
left join `mydb`.robot_user_profile as rup on rup.user_profile_id = up.id
left join `mydb`.robot as r on r.id = rup.robot_id
left join `mydb`.robot_house_history as rhh on r.id = rhh.robot_id
left join `mydb`.house as h on rhh.house_id = h.id
left join `mydb`.round as round on round.house_id = h.id
left join `mydb`.farm as f on h.farm_id = f.id
left join `mydb`.alert_notification as alert on alert.robot_id = r.id and alert.user_id = u.id
where (u.id = 'mnr3fsj' or r.created_by = 'mnr3fsj') and (alert.subject like "%%")
group by r.id limit 10 offset 0
Чего я хочу добиться с помощью этого фрагмента, так это вернуть первые 10 роботов, если пользователь не искал предмет предупреждения. Однако он возвращает только те строки, в которых тема оповещения не равна нулю. Если я немного изменю его на alert.subject like "%%" or alert.subject is null
, то он возвращает даже пустые столбцы, но я больше не могу искать, как и alert.subject like "%search%"
, потому что будут возвращены нулевые столбцы.
Я попытался изменить свой результаты вроде ifnull(alert.subject, 0) as sub
в предложении select, так что я могу искать, но кажется, что он выбирается после выполнения предложения where. Я буду любить предложения о том, как этого добиться.