我将精神崩溃。我的查询多次输出相同的结果

时间:2014-03-04 19:34:12

标签: mysql sql pdo where

如果我阻止用户,我的状态会输出多次。没有其他人,只有我的。

如果我阻止3个用户,我的状态更新会出现3次(重复相同的状态)。 如果我阻止10个用户,我的状态会重复10次。

这一定是那个血腥的WHERE子句......对吧?

//Get status results
        $sql = "SELECT 

        tbl_status.id as statID, 
        tbl_status.from_user as statFROM, 
        tbl_status.status as statSTATUS, 
        tbl_status.deleted as statDEL, 
        tbl_status.date as statDATE,

        tbl_users.id as usrID, 
        tbl_users.name as usrNAME,
        tbl_users.location as usrLOCATION,
        tbl_users.postcode as usrPOSTCODE,

        tbl_blocking.id as blockID,
        tbl_blocking.user as blockUSER,
        tbl_blocking.blocking as blockBLOCKING,
        tbl_blocking.date as blockDATE,
        tbl_blocking.block_by as blockBY,
        tbl_blocking.active as blockACTIVE

        FROM tbl_status 

        INNER JOIN tbl_users ON tbl_status.from_user = tbl_users.id
        LEFT JOIN tbl_blocking ON tbl_users.id = tbl_blocking.blocking

        WHERE 
        tbl_status.deleted = '0'
        AND tbl_blocking.user != :who
        OR tbl_blocking.user IS NULL

        ORDER BY 
        tbl_status.date desc

        LIMIT 200

        ";

1 个答案:

答案 0 :(得分:1)

您的WHERE条件混合AND和OR,评估的优先级,NOT - AND - OR

这是您当前的状况,为了清晰起见添加括号:

WHERE 
     (tbl_status.deleted = '0' AND tbl_blocking.user != :who)
  OR tbl_blocking.user IS NULL

你可能想要这个内容:

WHERE 
      tbl_status.deleted = '0'
  AND (tbl_blocking.user != :who OR tbl_blocking.user IS NULL)