您的问题是,您的查询没有返回您认为返回的内容(它总是有助于独立运行您的查询,以查看结果集是否是您所期望的)。
好吧,让我们来分解一下。
它正在计算用户不喜欢或不喜欢的所有帖子。喜欢和不喜欢都存储在出租车表中。 taxi.taxiID 与 post.ID 匹配。因此,如果发现具有任何非空值的 userID,请忽略该 post.ID。我正在计算那些未被忽略的post.ID
您正在尝试计算所有帖子don't出租车表中有该用户 ID 的匹配记录。你想要的是JOIN
表并获取这些行post
通常会被连接排除。这是通过左外连接实现的
(edited)
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL
That HAVING
子句的意思是:仅结果集中那些没有相应 t.taxiID 的行。
如果您运行此查询并获得预期的行集(该用户没有喜欢或不喜欢的帖子),那么您可以添加一个外部查询来计算返回的行数:
SELECT COUNT(*) as count FROM (
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL
) a
这应该返回一个名为 count 的标量。在这种情况下,你可以说:
if ($count[0]->count > 10) { blah blah blah }
(2nd edit)此内部查询将获取出租车表中值为 1 或根本没有值的帖子,这会导致您的示例返回 4:
SELECT p.ID, t.taxiID, t.value
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL OR t.value = 1