Это на несколько месяцев позже, но, возможно, помогает другим людям, сталкивающимся с той же проблемой. По сути, оператор FQL IN
не проверяет, находится ли значение в заданном диапазоне, но соответствует ли данное значение любому из предоставленных различных значений. В вашем примере, если '09' и '10' являются значениями, тогда все дни рождения в сентябре и октябре возвращаются, так как эти дни рождения совпадают с предоставленными номерами месяцев.
Что вы можете сделать, это рассчитать следующие значения с использованием PHP или любого другого языка, который вы используете, и использовать их в своем FQL (сегодня 17 марта и говорят, что 17 апреля - дата окончания):
- Сегодняшний день месяца (17),
- Сегодняшний месяц года (03)
- Дата окончания дня месяца (17)
- Дата окончания месяца года (04)
Убедитесь, что дни и месяцы отформатированы с использованием дд и мм соответственно (с добавлением нуля в случае однозначных цифр). Тогда ваш 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
Затем вернутся друзья, чей день рождения выпадает между 17 марта и 17 апреля.