2012-01-31 5 views
0

que quelqu'un peut me dire pourquoi cela fonctionne:FQL comme opérateur

SELECT name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) AND strpos(lower(name),"jo") >=0 

mais cela ne fonctionne pas:

"SELECT url, id, type, site FROM object_url WHERE strpos(lower(url), 'sephora') >= 0" 

Quand je le mets dans http://developers.facebook.com/docs/reference/rest/fql.query/

Je reçois cette réponse:

Votre instruction n'est pas indexable. La clause WHERE doit contenir une colonne indexable. Ces colonnes sont marquées d'un * dans les tables liées http://developers.facebook.com/docs/reference/fql

cependant "url" est en effet indexable.

des pensées? J'ai déjà parcouru stackoverflow mais aucune réponse n'a été trouvée.

Répondre

1

Le site n'est pas indexable, il est uniquement sélectionnable. Il n'a pas de * à côté ici https://developers.facebook.com/docs/reference/fql/object_url/

Vous devez utiliser url ou id comme colonne indexable, donc l'un de ceux-ci doit être dans votre clause where.

+0

typo ... en fait, il aurait dû être une URL depuis le début. édité la question. le résultat est toujours le même. – Rees

+0

Ensuite, je pense que c'est parce que l'exemple le plus haut n'utilise pas les fonctions de l'index. Alors, où uid IN (SELECT uid2 FROM ami O u uid1 = moi()) agit comme l'index, puis utilise le reste de la clause where. Donc exécuter l'URL SELECT, id, type, site FROM object_url WHERE url = 'sephora' et strpos (lower (url), 'sephora')> = 0 serait une requête valide (bien que de toute évidence, aucun résultat ne soit retourné comme url = 'sephora' n'est pas une URL complète) donc il semble que vous ayez besoin de changer votre requête – TommyBs

0

FQL! = SQL Vous ne pouvez pas avoir de WHERE sur une colonne de votre choix. Ce n'est pas surprenant vu la performance requise avec tant d'auteurs simultanés, je veux dire, une personne sur dix dans le monde s'est inscrite.

Le problème dans le deuxième exemple est qu'un champ utilisé en tant que paramètre dans l'une des fonctions de chaîne perd son indexabilité. Ce doit être la colonne elle-même.