我试图计算表格中的行数。目前即时使用此:
$sql = "SELECT COUNT(*)
FROM `friends`
WHERE `user1`='".$user1."'
AND `user2`='".$user2."'
AND `valid`=0
UNION
SELECT COUNT(*)
FROM `friends`
WHERE `user1`='".$user2."'
AND `user2`='".$user1."'
AND `valid`=0";
如您所见,user1
可以是$user1
和$user2
。但是它不计算UNION
之后的行,它只会在UNION
之前执行第一次查询,所以当我实际上应该计算1行时,我最终得到0。
我该如何解决这个问题?
答案 0 :(得分:4)
另一种选择,用以下内容替换您的查询:
$sql = "SELECT COUNT(*)
FROM `friends`
WHERE (
(`user1`='".$user1."' AND `user2`='".$user2."') OR
(`user1`='".$user2."' AND `user2`='".$user1."')
)
AND `valid`=0";
答案 1 :(得分:2)
您的查询实际上会返回2条记录 - 第一次计数为0
,第二次为1
。您可以使用子查询SUM()
您的结果...
$sql = "SELECT SUM(A) AS COUNT FROM
(SELECT COUNT(*) AS A
FROM `friends`
WHERE `user1`='".$user1."'
AND `user2`='".$user2."'
AND `valid`=0
UNION
SELECT COUNT(*)
FROM `friends`
WHERE `user1`='".$user2."'
AND `user2`='".$user1."'
AND `valid`=0
)";
答案 2 :(得分:1)
请改用UNION ALL
。 UNION
将排除重复的行。
答案 3 :(得分:1)
您可以使用更简单的解决方案:
SELECT COUNT(*)
FROM friends
WHERE
$user1 IN (user1,user2) AND
$user2 IN (user1,user2) AND
valid = 0