我有一个查询来根据父ID(order_id)选择所有子(位置):
SELECT * FROM positions WHERE order_id = X
结果如下:
ID | order_id | checked_1 | checked_2
1 | 1 | J. Doe | M. Doe
2 | 1 | | Mr. Tester
3 | 1 | J. Joe |
现在我需要一个查询来检查字段checked_1& checked_2并非空的所有相关子项。因此,如果孩子的所有领域都被填满,前端应该会有成功通知。
“迁移”所有孩子的最佳方法是什么,以便我可以在之后创建php查询?
答案 0 :(得分:1)
如果有空值,可以尝试这个来计算:
SELECT count(*) AS count_empty FROM positions
WHERE order_id = X AND (IFNULL(checked_1, '') = '' OR
IFNULL(checked_2, '') = '')
现在,如果count_empty为零,您可以显示成功消息。
答案 1 :(得分:0)
试试这个:
SELECT 'SUCCESS' as '' FROM postions WHERES orderid = x AND (checked_1 IS NOT NULL OR checked_1 = '') AND (checked_2 IS NOT NULL OR checked_2 = '');
答案 2 :(得分:0)
我们可以按订单汇总,然后针对给定的checked_1
群组检查是否存在空的checked_2
或order_id
列。您可以尝试以下查询:
SELECT
order_id,
CASE WHEN SUM(CASE WHEN COALESCE(checked_1, '') = '' THEN 1 ELSE 0 END) +
SUM(CASE WHEN COALESCE(checked_2, '') = '' THEN 1 ELSE 0 END) = 0
THEN 'valid' ELSE 'invalid' END AS status
FROM positions
WHERE order_id = 1
GROUP BY order_id;
请注意,我不知道缺失值是NULL
还是实际上只是空字符串。我的查询涵盖了这两种可能性,但如果这些缺失值为NULL
,那么您可以删除我对COALESCE
的调用。另外,如果您计划仅针对单个GROUP BY
运行此查询,则可以删除order_id
。虽然你是否需要一次运行多个订单的查询,但我上面写的内容应该派上用场。
答案 3 :(得分:0)
一种方法:
select MIN(CASE WHEN checked_1 = '' OR checked_2 = '' THEN 0 ELSE 1 END) from positions group by order_id
如果任何字段为空,您将获得“0”;如果所有字段为<>,则为“1” ''。