仅当所有记录具有相同值时才给出答案

时间:2017-03-24 13:13:05

标签: php sql

我有一张简单的表格:

id | from | tu | status_os1 | status_os2

状态os1和os2只能是paidunpaid

我想要显示一条消息"您已支付所有会费"。 所以我的问题是 - 只有当所有记录都有值"付费"?

时,我应该在sql部分写什么来给出答案?

我试图以这种方式做,但它也失败了。

$rezultat = $polacz->query("SELECT case when COUNT(status_os1) = 0 then 1 end FROM skladki WHERE status_os1='unpaid'");
$wynik = $rezultat->num_rows;
if($wynik>0)
{
    echo "You have all dues paid";
}       

6 个答案:

答案 0 :(得分:0)

SELECT COUNT(*)FROM skladki WHERE status_os1 ="付费"和status_os2 ="付费"

答案 1 :(得分:0)

您可以在CASE中使用COUNT()表达式

SELECT 
COUNT(case when status_os1 = 'paid' and status_os2 = 'paid' then 1 else 0 end) 
FROM skladki;

答案 2 :(得分:0)

我会从另一方面接近这一点:如果没有任何一行有status_o1或status_o2为' unpaid':

,则会给出消息
$rezultat = $polacz->query("SELECT COUNT(*) AS cnt FROM skladki WHERE status_os1='unpaid' or status_os2='unpaid'");
$row = $rezultat ->fetch_assoc();
$wynik = $row["cnt"];
if($wynik==0)
{
    echo "You have all dues paid";
}  

答案 3 :(得分:0)

您需要一个子查询来过滤掉所有记录,对于该人或客户,表中没有记录值为'未支付'。

Select * from table t
where not exists 
   (Select * from table
    Where id = t.Id
       and 'unpaid' in 
          (status_os1, status_os2))

答案 4 :(得分:0)

从背面尝试:

SELECT COUNT(*) FROM skladki WHERE status_os1 = "unpaid" or status_os2 = "unpaid"

如果至少有1条记录 - 某些记录处于未付款状态:)

答案 5 :(得分:0)

使用case表达式有条件地计算所有未付款的项目。如果返回0,则返回所有付费消息。

select case when count(case when status_os1 = 'unpaid' or status_os2 = 'unpaid' then 1 end) = 0 then 'You have all dues paid'
           else 'You have unpaid dues'
        end
from skladki