Consulta a 3 tablas sin que se repitan filas de la última tabla [Solucionado]
Publicado: 24 Diciembre, 2009 - 05:07 Consulta a 3 tablas sin que se repitan filas de la última tabla [Solucionado]
Hola, buen día. No estoy obteniendo los resultados esperados con una consulta que involucra tres bases de datos. La consulta es la siguiente:
db_query('SELECT DISTINCT ur.requestee_id, u.name, u.picture, n.nid, n.created FROM ({user_relationships} ur LEFT JOIN {users} u ON (u.uid = ur.requestee_id)) LEFT JOIN {node} n ON (n.uid = requestee_id) WHERE ur.approved=1 AND ur.rtid=1 AND ur.requester_id=%d AND n.type="tipo" ORDER BY n.created DESC LIMIT 10',$uid);Ocupo que en base a un campo (requestee_id) de la tabla "user_relationships" obtener otros campos de la tabla "users" y de la tabla "node" pero de esta última que muestre sólo el último registro que coincida. Para los que estén relacionados con drupal, lo que requiero es mostrar sólo el último nodo enviado de un tipo de contenido especifico de un usuario.
Tal como está la consulta, me muestra nodos repetidos. Creí que al usar DISTINCT ur.requestee_id no los repetiría.
¿Es posible realizar lo que quiero?, de ser así ¿que cambios debo realizar?.
Gracias de antemano.
- Inicie sesión o regístrese para enviar comentarios
- 850 lecturas


Sin conocer toda la estructura de la base de datos no me hago mucha idea, pero según entiendo quieres que no se repitan los campos de la tabla node, entonces podrías poner el DISTINCT sobre ese campo, Sería como:
SELECT DISTINCT n.nid ur.reques...O haciendo una consulta anidada, aunque creo que quedaría «poco elegante». Pero como digo no me aclaro mucho de cómo está estructurada tu BD (drupal lo empezaré a usar dentro de poco, de momento sé muy poco)
SELECT DISTINCT consulta1.nid, etc, FROM (tu consulta aquí) consulta1PD: Aclaro que no soy experto en BDs, igual estoy diciendo tonterías.
Si quieres coger sólo el ultimo nodo de cada tipo tendras que hacer una subselect que te los recoga
select Max(id) as ID ,tipo from nodo group by tipoY esta subtabla a la que puedes llamar nmax por ejemplo es la que unes con las otras dos.
La idea es que tengas en la tabla que unas mediante los join corespondientes solamnete el ultimo id de cada nodo
Lo he solucionado. La consulta ha quedado así:
db_query('SELECT ur.requestee_id, u.name, u.picture, MAX(n.nid), n.created FROM ({user_relationships} ur LEFT JOIN {users} u ON (u.uid = ur.requestee_id)) LEFT JOIN {node} n ON (n.uid = requestee_id) WHERE ur.approved=1 AND ur.rtid=1 AND ur.requester_id=%d AND n.type="tipo" GROUP BY ur.requestee_id ORDER BY n.nid ASC LIMIT 10',$uid);Gracias a ambos por su ayuda, me orientaron para encontrar la solución.