Ese fue mi primer gran problema al implementar el sistema de Facebook Comments en mi blog. Facebook te da el código para implementar el cajón de comentarios, con opciones para moderar, notificar, etc. Es un plugin magnífico si deseas darle mas status social a tu sitio web.

Pero cuando deseas mostrar los comentarios de cierta página, Facebook solo te da el número de los comentarios de primer nivel, es decir, no te suma las respuestas ni los demás comentarios anidados. Por lo tanto, si tienes 30 comentarios y cada uno tiene 5 respuestas, Facebook te dice que tu página tiene 30 comentarios en lugar de 150.

¿Cómo solucionar esto? Afortunadamente Facebook te da cierto acceso a su BD por medio de una API, y usando su propio lenguaje FQL puedes acceder a consultas un poco más complejas. Yo admito que aunque me gusta programar y tengo años dedicándome a eso, nunca me ha gustado usar SQL y nunca he sido bueno, así que sencillamente no tenía idea de cómo crear una query que me regresara todos los comentarios por lo que me dediqué a buscarlo en Google, y fue así como encontré una solución en StackOverflow.

select time
from comment
where 
object_id in 
(
   	select comments_fbid from link_stat where url ='http://example.com'
) 
or object_id in 
(
	select post_fbid from comment where object_id in
	(
		select comments_fbid from link_stat where url ='http://example.com'
	)
)

No tengo idea de cómo explicar esta consulta xD pero funciona, lo que sí sé es que FQL no permite el uso de la función COUNT() así solo indicamos un campo (time) para poder indexar los resultados. Cuando se ejecuta la query, esta nos regresa un documento XML fácilmente manipulable por medio de la clase SimpleXMLElement en PHP, al que solo tenemos que contarle los hijos para saber cuantos comentarios hay.


Para llamarlo, solo tenemos que enviar como parámetro la URL de la página deseada.


Espero que les sirva. Y gracias a Tom, el autor de esta solución.