2011-03-25 65 views
0

我想从一个mysql数据库中选择多行,基于所选列的值,我是新的php和sql,所以这可能是简单的东西,我似乎无法找到任何与我的情况相似的东西。下面是该查询我运行:mysql选择多行,多和/或

SELECT COUNT(userid) AS numrows 
FROM orders 
WHERE (
     `dispatched` = 'no' 
     AND `orderstatus` = 'Complete' 
     AND `category` = 'tosort' 
     ) 
     OR 
     (`category` = 'new') 

这个计算所有字段时,只显示在10左右。

谢谢, 大卫

+0

请问您可以选择'SELECT *'而不是'SELECT COUNT(*)'并发布一条不应该算在内的记录吗? – Quassnoi 2011-03-25 11:45:58

+0

另外,你使用某种'ORM'?大括号在纯MySQL中会失败,你真的在​​你的查询中有吗? – Quassnoi 2011-03-25 11:48:03

+0

嗨Quassnoi,大括号只是我在另一个网站上看到的东西,我必须承认我曾经看过他们以前使用过它。 – David 2011-03-25 12:00:37

回答

0

不要使用括号使用括号。这个工作对我来说:

select count(*) as numrows 
from orders 
where (dispatched = 'no' and orderstatus = 'Complete' and category = 'tosort') 
    or category = 'new'; 
+0

嗨,布赖恩,我只是尝试一些simlar到这个但如上所述,它会返回一个或多个结果:一个有不完整的orderstaus而不是完成 – David 2011-03-25 12:09:45

+0

除'new'或'tosort'之外,还有其他任何类别吗?如果是这样,那么你需要在你的SQL中考虑所有这些。具有不完整orderstatus的记录的类别字段的内容是什么? – 2011-03-25 12:14:16

+0

嗨,布莱恩,是的,还有一个比上述两个类别更多的类别我发布了一个上面显示的错误示例 – David 2011-03-25 12:23:58

0

什么是你的错误?因为现在看代码,看起来没问题。

您可能希望记录具有“派遣 - 不,订单 - 完成和类别 - 托斯特”或..任何与'类别 - 新'。

编辑:哦,远射,也许你需要更换{和}与()

+0

嗨Gerben对不起,我错过了你的消息,我确实尝试了这个,它使查询工作,但其他人在这里只是帮助我解决另一个问题。谢谢你的帮助,但我更近了一步!:) – David 2011-03-25 12:25:10

0

谢谢大家对我付出的快速回信,周围多一点我设法得到这个工作后打。在这里,如果你有人正在阅读本文,寻找相同的答案:

SELECT COUNT(userid) AS numrows FROM orders WHERE (`dispatched` = 'no' AND `orderstatus` = 'Complete' AND `category` = 'tosort') OR (`dispatched` = 'no' AND `orderstatus` = 'Complete' AND `category` = 'new') 

再次感谢!

+0

这是更简单的方法做同样的事情: select numrows(\ *)as numrows 来自订单 ,其中dispatched ='no'且orderstatus ='Complete'和类别('tosort','new'); 如果您只是要计算结果集中返回的记录数,则最好使用count(*)。如果您在count(fieldname)中显式指定一个字段名称,则该字段中包含空值的任何记录都不会包含在该计数中。详情请参阅http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count。 – 2011-03-25 13:03:46

+0

嗨,布赖恩,谢谢你提供的信息,我已经更新了我的脚本,这是一个更干净的方式做到这一点。 – David 2011-03-25 14:06:55