我有一个(大)SQL查询,但是我不知道怎么写 WHERE 部分。
我目前的编写方式如下:
AND (tbl_blocking.user != :who OR tbl_blocking.blocking != :who)
哪个方法工作不正常。
我想说,显示结果 UNLESS ':谁出现在tbl_blocking.user OR tbl_blocking.blocking列
目前,所有这些都在发生,所有结果都被提出并重复 - TWICE 。
示例:
[状态一!],[状态一!],[状态二!],[状态二!]
我确信看到整个查询也会有所帮助,所以这就是:
//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.active as blockACTIVE,
tbl_blocking2.id as blockID2,
tbl_blocking2.user as blockUSER2,
tbl_blocking2.blocking as blockBLOCKING2,
tbl_blocking2.date as blockDATE2,
tbl_blocking2.active as blockACTIVE2
FROM tbl_status
LEFT JOIN tbl_users ON tbl_status.from_user = tbl_users.id
LEFT JOIN tbl_blocking ON tbl_users.id = tbl_blocking.user
LEFT JOIN tbl_blocking2 ON tbl_users.id = tbl_blocking2.user
WHERE
tbl_status.deleted = '0'
AND tbl_blocking.active = '0'
AND (tbl_blocking.user != :who OR tbl_blocking.blocking != :who)
ORDER BY
tbl_status.date desc
LIMIT 200
";
答案 0 :(得分:0)
我认为这就是你想要的:
AND tbl_blocking.user <> :who AND tbl_blocking.blocking <> :who
也就是说,您不希望任何一列中都有:who
。
编辑:
您的逻辑陈述是:
这是一步一步的转变:
显示结果UNLESS(:谁出现在tbl_blocking.user或:谁出现在tbl_blocking.blocking列中)
显示结果UNLESS(tbl_blocking.user =:who或tbl_blocking.blocking =:who)
显示结果WHERE NOT(tbl_blocking.user =:who或tbl_blocking.blocking =:who)
显示结果WHERE tbl_blocking.user&lt;&gt; :谁和tbl_blocking.blocking&lt;&gt; :谁
编辑II:
如果值可以是NULL
:
AND coalesce(tbl_blocking.user, '<null>') <> :who AND coalesce(tbl_blocking.blocking, '<null>') <> :who
答案 1 :(得分:0)
如果您只想要 :who
或 tbl_blocking.user
中没有tbl_blocking.blocking
的项目,您只需要。 ..
AND tbl_blocking.user != :who
AND tbl_blocking.blocking != :who
...有
因为您实际上在说“给我user
不是:who
而 <{1}}的行。”
答案 2 :(得分:0)
您希望两个条件都为真(即两个比较都不相等),因此您希望使用and
运算符:
AND (tbl_blocking.user != :who AND tbl_blocking.blocking != :who)
您也可以使用not
和or
:
AND NOT (tbl_blocking.user = :who OR tbl_blocking.blocking = :who)
(在布尔逻辑(not x) and (not y)
中相当于not(x or y)
。)