0

我正在使用计数查询从我的表中选择所有不重复的记录,我正在使用以下内容:

function check_profile_views3() {
            global $connection;
            global $_SESSION;
            $query = "SELECT COUNT(DISTINCT profile_id) totalCOUNT2 FROM ptb_profile_views WHERE viewed_profile_id=".$_SESSION['user_id']." AND profile_id!=".$_SESSION['user_id']."";
            $check_profile_views_set3 = mysql_query($query, $connection);
            confirm_query($check_profile_views_set3);
            return $check_profile_views_set3;       
        }

我的桌子看起来像这样:

id  |  profile_id | viewed_profile_id
1          3               6
2          3               6
3          4               6
4          -1              6
5          -1              6

所以在这个例子中,我的查询选择了不同的值并且不计算那些在 profile_id 字段中重复的值,

但是,我现在想在此查询中添加一个例外,以计算所有“-1”配置文件 ID 以及计算所有不同的正数。

这可能我还在学习sql吗,所以如果有人能帮助我,我会非常感激。

谢谢

期望的结果

the mysql table goes from this:
id | profile_id | viewed_profile_id
1        3               6
2        3               6
3        4               6
4       -1               6
5       -1               6

to this:

end result pulls results from table like this
id | profile_id | viewed_profile_id
1        3               6
2        4               6
3       -1               6
4       -1               6

好的,所以我尝试了 JW 的答案,我试图这样做,但我在某个地方出错了:

这就是我如何进行查询:

function check_profile_views3() {
        global $connection;
        global $_SESSION;
        $query = "
        SELECT  a.*
        FROM    ptb_profile_views a
        INNER JOIN
    (
        SELECT  profile_id, MIN(ID) min_ID
        FROM    ptb_profile_views
        WHERE   profile_id > 0
        GROUP   BY profile_id
    ) b ON a.profile_id = b.profile_id AND
            a.ID = b.Min_ID
            UNION
            SELECT  *
            FROM    ptb_profile_views
            WHERE   profile_id < 0";
        $check_profile_views_set3 = mysql_query($query, $connection);
        confirm_query($check_profile_views_set3);
        return $check_profile_views_set3;       
    }

然后我在页面上这样调用它:

$check_profile_views_set3 = check_profile_views3();
while ($views3 = mysql_fetch_array($check_profile_views_set3)) { 

echo "". $views3['totalCOUNT2'] ."";
4

2 回答 2

0

你能试试这个:

SELECTviewed_profile_id,COUNT(DISTINCT profile_id) totalCOUNT2 FROM ptb_profile_views WHERE profile_id not in (".$_SESSION['user_id']." ,-1) GROUP byviewed_profile_id

于 2013-04-09T05:39:19.807 回答
0

尝试这个

SELECT id,profile_id,viewed_profile_id 
FROM ptb_profile_views p
INNER JOIN
( SELECT MIN(id) minid FROM ptb_profile_views
  GROUP BY profile_id) x
ON p.id = x.minid
WHERE profile_id > 0
GROUP BY profile_id

UNION


SELECT id,profile_id,viewed_profile_id 
FROM ptb_profile_views 
WHERE profile_id <= 0
于 2013-04-09T05:45:35.520 回答