2012-05-03 10 views
5

que tienen este diagrama POST WITH FEEDSMySQL PHP cómo la relación tres tablas que muestran las salidas de diferentes tablas

Lo que quiero hacer es tener esta salida: Likes post - like Facebook

¿Cómo haces para hacer la consulta de éste ?

tengo este código

SELECT users.firstname, users.lastname, 
     users.screenname, posts.post_id, posts.user_id, 
     posts.post, posts.upload_name, 
     posts.post_type, posts.date_posted 
FROM website.users users 
INNER JOIN website.posts posts ON (users.user_id = posts.user_id) 
ORDER BY posts.pid DESC 
//PROBLEM with this one is that it only views the post from all users. 

//SO I added 
SELECT COUNT(user_id) AS friends, SUM(user_id = ?) AS you, user_id 
FROM feeds WHERE post_id = ? 
//This one will give you two fields containing how many different users **feeds** the 
post 

Por favor, ayudar a los chicos. En realidad ésta sólo estoy siguiendo "LIKE" estado lo único de Facebook es que no soy un aficionado a este tipo de cosas, así que estaría contento de escuchar todas sus respuestas. Realmente necesito su ayuda

Respuesta

3

Si le he entendido bien, usted quiere una combinación externa con la tabla feeds (con el fin de conservar toda posts incluso si no hay se asocian feeds), entonces GROUP BY post.pid con el fin de amalgamar juntos todo tales alimentaciones para cada publicación, y SELECT la información deseada.

utilizo la función de MySQL GROUP_CONCAT() para obtener una lista separada por comas de todos los usuarios (hasta group_concat_max_len) que tienen un "avance" para el puesto determinado (se puede cambiar el delimitador con el modificador SEPARATOR, si así se desea) .

SELECT users.firstname, users.lastname, 
     users.screenname, posts.post_id, posts.user_id, 
     posts.post, posts.upload_name, 
     posts.post_type, posts.date_posted, 
     COUNT(feeds.user_id) AS friends, -- number of "likes" 
     SUM(feeds.user_id = ?) AS you,  -- did I like this? 
     GROUP_CONCAT(feeds.user_id)  -- who likes it? 
FROM website.users users 
INNER JOIN website.posts posts ON (users.user_id = posts.user_id) 
LEFT JOIN website.feeds feeds ON (posts.post_id = feeds.post_id) 
GROUP BY posts.pid 
ORDER BY posts.pid DESC 

ACTUALIZACIÓN

Para obtener el nombre completo de los usuarios que han "gustado" el post, con exclusión de uno mismo, uno tiene que unirse a la mesa users por segunda vez:

SELECT users.firstname, users.lastname, 
     users.screenname, posts.post_id, posts.user_id, 
     posts.post, posts.upload_name, 
     posts.post_type, posts.date_posted, 
     COUNT(feeds.user_id) AS friends,      -- number of "likes" 
     SUM(feeds.user_id = ?) AS you,      -- did I like this? 
     GROUP_CONCAT(
     CASE WHEN NOT likes.user_id = ? THEN    -- exclude self 
      CONCAT_WS(' ', likes.firstname, likes.lastname) -- full names 
     END 
     ) 
FROM website.users users 
INNER JOIN website.posts posts ON (users.user_id = posts.user_id) 
LEFT JOIN website.feeds feeds ON (posts.post_id = feeds.post_id) 
LEFT JOIN website.users likes ON (feeds.user_id = likes.user_id) 
GROUP BY posts.pid 
ORDER BY posts.pid DESC 
+0

muchas gracias compañero! Pero hermano, acerca de esta línea "SUM (user_id =?) AS, ¿me gustó esto? GROUP_CONCAT (user_id)" ¿debería ser "feeds.user_id"? Estoy teniendo un error que dice: "user_id columna en lista de campos es ambigua –

+0

Sí, lo siento:..' Feeds.user_id' Actualizado – eggyal

+0

Muchas gracias chicos por toda su ayuda compañero –

2

Si desea hacerlo por todos los usuarios y al mismo tiempo obtener los feeds, ja ve a unirse a esta tabla feed:

SELECT u.firstname, u.lastname, 
    u.screenname, p.post_id, p.user_id, 
    p.post, p.upload_name, 
    p.post_type, p.date_posted, 
    COUNT(f.user_id) AS friends, SUM(f.user_id = ?) AS you 
FROM website.users u 
INNER JOIN website.posts p ON (u.user_id = p.user_id) 
LEFT JOIN website.feeds f ON (p.post_id = f.post_id) 
GROUP BY p.pid 
ORDER BY p.pid DESC 

Ésta debe hacer el truco ...

+0

¡Gracias amigo! tratando de entender todo –

+0

@PeterWateber De nada. – shadyyx

Cuestiones relacionadas