我需要一种方法来订购行列表并将用户的Facebook好友放在第一位。
我有什么方法可以做到吗?我应该采用哪种方法?
我从未使用过Facebook Connect,所以这只是一个假设的问题,因为我很快就会使用它。
每次用户搜索时都会获取Facebook好友列表(并且会生成列表)。然后在我的表中,我将保存每个用户的facebook_uid?
但我如何订购,以便Facebook的朋友是第一个,之后会出现“陌生人”?
我的表格可能如下所示:
id - facebook_uid - text
1 - 1111111 - lorem ipsum.....
2 - 2222222 - something else....
3 - 3333333 - third!!!
因此,如果例如1111111和3333333是我的朋友,那么返回的ID将是(按照正确的顺序):1,3,2。
如何在SQL(或PHP逻辑)中订购?
答案 0 :(得分:1)
我用两个阵列跟随罗宾的方法。
首先,我从Graph加载Facebook好友列表(json)。然后我循环遍历它,创建一个只有朋友ID的数组。这样,我可以使用in_array来检查特定ID是否是朋友。
<?php
function get_facebook_friends(){
$friends = json_decode(file_get_contents("https://graph.facebook.com/me/friends?access_token=XXXXXX"));
$friendArray = array();
foreach($friends->data as $friend){
$friendArray[] = $friend->id;
}
return $friendArray;
}
function is_facebook_friend($friends, $facebook_uid){
return in_array($facebook_uid, $friends);
}
//Do your query stuff...
$friends = get_facebook_friends();
$is_friends = array();
$not_friends = array();
foreach ($rows as $row){
if(is_facebook_friend($friends, $row->facebook_uid)){ //Is friend
$is_friends[] = $row;
}else{
$not_friends[] = $row;
}
}
$rows = array_merge($is_friends, $not_friends);
//Do normal loop here
?>
非常有效和快速。
答案 1 :(得分:0)
Facebook图表可以使用fql。虽然它基于SQL,但它有一些限制,例如缺少NOT IN()
和东西。通过在表friend
中运行所有已采用的facebook_id
,您可以通过查询找出他们是否是朋友。
这假设您存储了所有ID。让我们说你搜索,并获得10个结果。通过friend
表运行所有这些id,如:
SELECT uid2 FROM friend WHERE uid1 = me() AND uid2 IN ({$search_user_1}, {$search_user_1}, ...)
返回的uid2显然是特定人的朋友。
<强>更新强>
我怀疑fql可以根据需要处理UNION
和subqueries
。但是我的解决方案仍然是相同的。
提取行,通过Facebook的api运行fql并比较匹配。如果它们匹配,您可以将它们放入数组$friends
,其他$not_friends
然后$users = array_merge($friends, $not_friends)
,然后对它们进行排序。用你的想象力。
这个,或者首先运行fql以获取当前用户的朋友,然后将它们添加到您自己的数据库中,每个访问日/小时/页面。然后只需运行JOIN
来检查他们是不是朋友。
答案 2 :(得分:0)
因此,如果例如1111111和3333333是我的朋友,那么返回的ID将是(按照正确的顺序):1,3,2。
如何在SQL(或PHP逻辑)中订购?
我认为这应该足够了(在MySQL中):
… ORDER BY IF(facebook_uid IN (1111111,3333333), 1, 0) DESC
如果记录的facebook_uid在给定列表中,则导致“排序值”为1,否则为0。对它进行排序DESCending使得1值在0值之前。
将逗号分隔的朋友ID的实际列表插入到IN运算符的括号中应该没什么大不了的,例如,如果将它们作为数组使用,则可以使用逗号作为分隔符将它们内爆。