MYSQL使用区别但包括免除/排除条件?

时间:2013-04-09 05:20:05

标签: mysql distinct

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

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'] ."";

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

SELECT seen_profile_id,COUNT(DISTINCT profile_id)totalCOUNT2 来自ptb_profile_views WHERE profile_id不在(&#34;。$ _ SESSION [&#39; user_id&#39;]。&#34;, - 1) GROUP by seen_profile_id

答案 1 :(得分: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