MySql条件SQL。我的情景可能吗?

时间:2012-04-17 11:15:56

标签: php mysql sql conditional

让我先说明情况。

我有一个带X字段的“用户”表,除了“可见性”之外,字段对我的问题并不重要。可见性是一个tinyint,值表示以下(0 =对所有人可见,1 =仅对朋友可见,2 =不可见)。

我还有一个朋友表(id, user_id, target_user_id)user_idtarget_user_id的朋友。到目前为止还够容易吗?

这是粘性的地方。我正在编写PHP API,我的类方法看起来像这样:

public function getUsers($requester, $page, $num) {}
  • $requester是请求用户的用户ID
  • $page是分页页码
  • $num是每页的商品数

如果可见性字段为= 0或1,我想在SQL中做的是从用户表中获取$num个用户。如果可见性标志为1,我需要确保用户ID和$ requester是friends表中的朋友,只有当他们是朋友时才返回该用户。

我想在使用我的结果后使用PHP来过滤可见性,但是如果我要求5条记录,并且一个或多个用户的可见性设置为1并且不是朋友,那么分页(限制)将被搞砸与请求者。这几乎必须通过sql完成。

可能??

2 个答案:

答案 0 :(得分:1)

尝试使用与用户相同的结构创建临时表'temp'。

select * into temp From users where visibility=0 or visibility=1;
Select * from temp, friends where (temp.visibility=0) or (temp.user_id = friends.target_user_id);

不要忘记清空临时表。

我没有尝试过第二个查询,让我知道你得到了什么输出。

select * from users, friends where (users.visibility=0) or (users.visibility=1 and users.user_id = friends.target_user_id);

答案 1 :(得分:0)

我认为你可以使用LEFT JOIN ......就像

"SELECT * 
FROM users t1 
LEFT JOIN friends t2 ON t2.user_id=t1.id AND t1.visibility=1
INNER JOIN user t3 ON t3.id=t2.target_user_id
WHERE t1.visibility=0 OR t1.visibility=1
LIMIT ".($page*$num).",".$num