1

テーブル内の行をカウントしようとしています。現在、これを使用しています:

$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";

ご覧のとおり、 ANDuser1の両方にすることができます。しかし、その後の行はカウントされません。最初のクエリのみを実行するため、実際には 1 行をカウントする必要があるときに 0 になります。$user1$user2UNIONUNION

これを解決するにはどうすればよいですか?

4

4 に答える 4

4

別の方法として、クエリを次のように置き換えます。

$sql = "SELECT COUNT(*) 
    FROM `friends` 
    WHERE (
            (`user1`='".$user1."' AND `user2`='".$user2."') OR
            (`user1`='".$user2."' AND `user2`='".$user1."')
          )
     AND `valid`=0";
于 2012-07-11T17:24:38.467 に答える
2

クエリは実際には 2 つのレコード0を返しています - 最初のカウントと12 番目のレコードです。結果にサブクエリを使用できます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
)";
于 2012-07-11T17:25:25.440 に答える
1

UNION ALL代わりに使用してください。UNION重複行を除外します。

于 2012-07-11T17:22:24.560 に答える
1

さらに単純なソリューションを使用できます。

SELECT COUNT(*)
FROM friends
WHERE 
    $user1 IN (user1,user2) AND 
    $user2 IN (user1,user2) AND
    valid = 0
于 2012-07-11T17:31:40.627 に答える