Я запрашиваю две таблицы с помощью запроса JOIN, чтобы определить, каждая ли строка в столбце approved
результирующего набора равна TRUE
.
SELECT
`approvals`.`approved`
FROM `sign_ins`
RIGHT JOIN `approvals` ON
`sign_ins`.`user` = `approvals`.`user`;
Это вернет результирующий набор логических значений для каждого пользователя, например.
1
0
0
1
1
Мой PHP-код просматривает эти строки и определяет, все ли они одобрены, просто возвращая false и прерывая цикл, если любое из этих значений равно 0
. Однако я думаю, что было бы более производительно и оптимально, если бы не было необходимости в повторении набора результатов; в конце концов, меня действительно волнует только одно: TRUE
, если значение всех строк approved
равно TRUE
; иначе, FALSE
.
Могу ли я сделать это с помощью запроса MySQL?
Спасибо.
3 ответа
Вот мое решение. Я использую функцию MIN
для выбора наименьшего значения, поэтому она должна возвращать 0
, если присутствуют какие-либо значения FALSE
. Кроме того, поскольку это не полное соединение, вход в систему, отсутствующий в таблице approvals
, следует считать неутвержденным; поэтому я использовал IFNULL
для предоставления значения по умолчанию FALSE
.
Вот полный пример моего запроса (без некоторой логики даты):
SELECT
MIN(IFNULL(`approvals`.`approved`, FALSE))
FROM `sign_ins`
LEFT JOIN `approvals` ON
`sign_ins`.`user` = `approvals`.`user`;
Если вы просто хотите получить все ИСТИННЫЕ результаты, попросите их!
SELECT
`approvals`.`approved`
FROM `sign_ins`
RIGHT JOIN `approvals` ON
`sign_ins`.`user` = `approvals`.`user`;
WHERE `approvals`.`approved` = 1
Я бы просто COUNT()
все строки сравнил с SUM()
утвержденного столбца. Если они совпадают, то все строки равны 1. Если нет, то был хотя бы один 0.
Использование COUNT(approved)
не будет считать значения NULL
, поэтому вам не нужно это компенсировать.
Ваш запрос будет выглядеть так:
SELECT (CASE WHEN COUNT(approved)=SUM(approved) THEN 1 ELSE 0 END)
FROM sign_ins
RIGHT JOIN approvals USING (user)
Это должно вернуть 1 для ИСТИНА и 0 для ЛОЖЬ.
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.