san*_*kcm 2 facebook strtotime facebook-fql facebook-php-sdk
使用FQL的信息和Facebook开发人员文档中的用户表,我提出了以下代码.
//build fql string
$fql = "SELECT name, birthday_date FROM user
WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1 = me())
AND strlen(birthday_date) != 0 AND substr(birthday_date,0,3)
IN ('{$currentMonth}/', '{$nextMonth}/')";
$fql.=$orderBy;
$fql.=" LIMIT " . $limit;
//query facebook
$params = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
$birthdays = $this->facebook_obj->api($params);
Run Code Online (Sandbox Code Playgroud)
$currentMonth并$nextMonth分别设置为当前月份和下个月的字符串表示形式,格式为mm.(例如"09","10"等)
这是"工作",但是我们说今天是11月29日,我在11月有20个生日的朋友,并且$limit设置为10.在这种情况下,很有可能它返回的10个生日都将在11月之前第29位.
我真正想做的是从今天开始,即本月和下一个即将到来的生日.我怎么能修改这个查询来实现呢?
谢谢!
**编辑,请参阅Shawn和I之间的评论主题以寻找可能的替代解决方案.由于没有人直接解决原始代码/问题,因此尚未接受答案.
这是几个月的晚了,但也许可以帮助其他人面临同样的问题.基本上,FQL IN运算符不检查值是否在给定范围内,而是检查给定值是否与提供的任何不同值匹配.在您的示例中,如果值为"09"和"10",则返回9月和10月的所有生日,因为这些生日月份与提供的月份数相匹配.
您可以做的是使用PHP或您正在使用的任何其他语言计算以下值,并在您的FQL中使用它们(今天是3月17日,并说我们希望4月17日是结束日期):
确保分别使用dd和MM格式化日期和月份(在单个数字的情况下填充为零).然后你的FQL看起来像这样:
SELECT name, birthday_date
FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
AND strlen(birthday_date) != 0
AND ((substr(birthday_date, 0, 2) = '03'
AND substr(birthday_date, 3, 5) >= '17')
OR (substr(birthday_date, 0, 2) = '04'
AND substr(birthday_date, 3, 5) < '17'))
ORDER BY birthday_date
Run Code Online (Sandbox Code Playgroud)
然后,这将返回3月17日至4月17日之间生日的朋友.
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |