Поиск людей по имени в FQL - PullRequest
       3

Поиск людей по имени в FQL

3 голосов
/ 07 декабря 2010

Я пытаюсь разработать функцию поиска людей по имени с помощью API Facebook.

Я пытаюсь этот FQL-запрос:

SELECT uid, username, name, pic_square FROM user WHERE strpos(name, 'Alfredo Artiles') >= 0

Но я получаю " Ваше утверждение не индексируется. Предложение WHERE должно содержать индексируемый столбец. " Ошибка.

Я также пытался добавить условие "и uid> 0", но это тоже не сработало.

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 14 мая 2012
SELECT uid, username, name, pic_square FROM user WHERE contains('Alfredo Artiles')

Понятия не имею, почему это работает, поскольку оно нарушает «хотя бы и индексируемое поле в WHERE», но это так.ссылка

4 голосов
/ 07 декабря 2010

позднее редактирование

Хорошо, извините за ошибку, касающуюся strpos, я не помнил его существования в прошлый раз, когда я проверял документы fql.Дело в том, что его можно использовать только в определенных случаях.У вас должен быть первичный индексируемый столбец в вашем предложении where и второе условие с strpos (по крайней мере, так я его использовал).Например:

SELECT actor_id, message FROM stream WHERE source_id = me() AND strpos(message, 'stuff') > 0 limit 50

Надеюсь, это немного прояснит путаницу с этой функцией.

0 голосов
/ 10 июля 2013

ДА, ВЫ МОЖЕТЕ !!!

Попробуйте поискать в таблице профиля, а не в таблице пользователей.В таблице профиля поле имени индексируется, поэтому ваш оператор должен будет измениться только немного:

SELECT id, username, name, pic_square FROM profile WHERE contains('alfredo artiles') and type='user'

Contains без учета регистра, в то время как strpos это.Вы все еще могли бы использовать lower и strpos, но у вас также была бы проблема специальных символов.Содержит решение.

Вы можете найти все поля таблицы профиля в facebook doc :

Надеюсь, это поможет!

0 голосов
/ 08 августа 2012

Вам нужно указать uid, в котором пункт, где извлекаются детали, в пользовательской таблице facebook.мы не получаем всю информацию о пользователе. здесь можно получить подробную информацию о зарегистрированном пользователе

"SELECT name FROM user WHERE uid IN(SELECT uid2 FROM 
friend WHERE uid1 = me()) AND strpos(name,'Alfredo Artiles') >=0"
...