Mysql检查子行元素的空行

时间:2018-02-05 11:34:49

标签: mysql pdo

我有一个查询来根据父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查询?

4 个答案:

答案 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_2order_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” ''。

http://sqlfiddle.com/#!9/f7518d/1