2011-07-15 237 views
1

所以我试图通过一个表进行查询,如果学生列中的“状态”为“活动”,则将其称为 ,然后从前一条记录中选择“firstName”和“lastName”coloumns 。每个记录都有一个主键。 也就是说,如果记录的“状态”列是=活动的,那么,我想选择先前记录。 该表已填充了像SQL选择上一条记录,其中

id firstname lastname status   email 
9 Joe   Peters  inactive  [email protected] 
10 kim   Rol   active   [email protected] 
11 Lance  Ree   inactive  lll&hh.com 
12 diana  Jones  active   [email protected] 

对于这个数据的数据,查询应该返回乔·彼得斯和枪稀土 我怎样才能做到这一点? 谢谢

+0

“SQL”中没有“以前的记录”。以前的顺序? – Quassnoi

+0

你能解释一下你想在更高层面上做什么吗?也许有一个更简单的方法? – Jacob

+0

如果您可以在表格中绘制数据,这将有所帮助,这样我们就可以看到您要查找的内容。如果你的意思是选择前一行,如果状态栏='active',那么你的设计可能会出现严重错误。 –

回答

1

如果你只是想从学生为active记录选择名称,查询是一个简单的

SELECT id, firstname, lastname 
FROM students 
WHERE status = "active" 

我假设你通过上一行的意思行你刚刚确定是一名活跃的学生。该查询将检查你的表格是否有活跃的学生,并检索他们的名字。由于名称很少独特,因此我添加了ID列。 我还建议将status列设置为0或1整数。

如果你真的想选择上一行,您可以使用

SELECT sj.id, sj.firstname, sj.lastname 
FROM students AS s 
LEFT JOIN students AS sj ON (sj.id = s.id - 1) 
WHERE s.status = "active" 

的一点是决定你行,你要选择的行之间的关系。在这种情况下,您想要选择ID 1小于当前行的行。由于这种约束非常有限,因此以这种方式选择行并不是一个好主意。你可能想重新设计你的数据库。

+0

另外,你活跃的学生是金罗和戴安娜琼斯。如果你想Joe Peters和Lance Ree设置'status =“inactive”' – Naltharial

+0

谢谢。这只是一个例子,我想知道是否有可能/如果有一个简短的方法来选择基于当前的记录 – jpo

+0

我用你的信息更新了答案。 – Naltharial

0

与以前的记录,你可能意味着密切插入一个。您可以使用last_insert_id()(这是一个mysql函数)引用该行,该行将返回最后插入的自动递增值。

select * from T where id = last_insert_id();