Php MySQL:选择不与可能的值1和-1重复的列值

Php MySQL:选择不与可能的值1和-1重复的列值,php,mysql,Php,Mysql,我有如下的dB表 id | branch | allot 1 | Comp | -1 2 | IT | -1 3 | Comp | -1 1 | Comp | 1 其中allot=-1表示座位已分配,allot=1表示座位取消 我想要一个只返回id=2,3的MySQL查询 不是id=1,因为它后来取消了座位。您的问题特别提到“以后”。这不能用您的数据格式完成,因为SQL表表示无序集。而且,您没有指定排序的列 如果要获取-1值并排除带有1的值,

我有如下的dB表

id | branch | allot  
 1 | Comp   | -1  
 2 | IT     | -1  
 3 | Comp   | -1   
 1 | Comp   |  1  
其中
allot=-1
表示座位已分配,
allot=1
表示座位取消

我想要一个只返回id=2,3的MySQL查询

不是id=1,因为它后来取消了座位。

您的问题特别提到“以后”。这不能用您的数据格式完成,因为SQL表表示无序集。而且,您没有指定排序的列

如果要获取
-1
值并排除带有
1
的值,有几种方法。一种是使用
不存在

select t.*
from dbtable t
where allot = -1 and
      not exists (select 1
                  from dbtable t2
                  where t2.id = t.id and t2.allot = 1
                 );
如果以后发现某列确实具有记录顺序(例如
createdat
),则可以轻松地将其修改为:

select t.*
from dbtable t
where allot = -1 and
      not exists (select 1
                  from dbtable t2
                  where t2.id = t.id and t2.allot = 1 and
                        t2.createdat > t.createdat
                 );

< P>这样,当同一个座位存在2行时,选择<代码> ALLT =1(从MAX),然后最终从选择(自何处)下落。

已分配为-1的ID(意味着座位被保留),但相同的ID稍后被分配为1(意味着先前保留的座位被取消),现在不应该考虑。那么什么?是的,这正是我提出的问题所带来的结果。更准确地说,从您最初发布的示例中,您将只获得
id
s2和3。
SELECT `id`, `branch`, MAX(`allot`)
FROM `table`
GROUP BY `id`
WHERE `allot` = -1