Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Помогите пожалуйста, как правильнее чз Query Builder/Eloquent выбрать все записи пользователей со значением false в колонке bool если они в данной таблице не когда не были со значением true (хоть до, хоть после).
Не понимаю как еще более точно описать...
Ниже в примере user_id = 2 c записю id = 2 вывестить не должно, потому как далее есть запись user_id = 2 со значением true.
Соответственно user_id = 3 c записю id = 7 тоже не должнв быть выведена.
id id_user bool
0 1 false
1 1 false
2 2 false
3 2 true
4 1 false
5 3 true
6 4 false
7 3 false
На ум приходит только действие в 2 запроса. Сначала собрать всех в массив, кто хотябы раз встретился со значением true. Далее пробежаться по всем записям с выборкой whereNotIn, данным массивом и where bool === false.
Изменено sShpion (25.10.2022 18:24:37)
Не в сети
Во-первых, стандартный SQL не приспособлен для запросов типа "далее есть записи с...". Но можно переосмыслить задачу и добиться нужного результата.
Например так: выбрать всех пользователей, у которых не встречалось значение true (через группировку по пользователю). Для таких пользователей вывести все их записи.
Это можно реализовать через джойн или через where in подзапрос. В любом случае, начинать лучше с сочинения запроса на настоящем SQL, проверить его на правдоподобных данных и только потом выразить в виде Eloquent Query Builder.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Сделай заготовку с данными на https://www.db-fiddle.com/ пожалуйста. Ты упростишь работу тем, кто захочет помочь. Не заставляй нас тратить слишком много времени.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1