2012-02-08 3 views
0

Я хочу знать, могут ли эти два запроса быть объединены, я немного объясню, что делают запросы.php mysql query join merge

Это моя структура таблицы:

  • пользователей: идентификатор, имя
  • usersFacebookFriends: идентификатор, UID, friendUid
  • деятельности: Удостоверение личности, описание, дата, время
  • activitiesUsers: идентификатор, activityId, uid

Таким образом, у нас есть пользователи, пользователи имеют друзей, пользователи могут создавать действия, и несколько пользователей могут быть обязаны действовать ivities. Надеюсь, это ясно.

SELECT DISTINCT 
    A.description, A.date, A.time 
FROM 
    usersFacebookFriends UF 
JOIN 
    activitiesUsers AF 
ON 
    AF.uid = UF.friendUid 
JOIN 
    activities A 
ON 
    A.id = AF.activityId 
WHERE 
    UF.uid = :uid 

Параметр uid в запросе, очевидно, является идентификатором пользователя. После выполнения этого запроса я в настоящее время сделать это:

foreach($activities as $activity){ 
    // SELECT 
    //  U.id, U.name, U.firstName, U.level 
    // FROM 
    //  activitiesUsers AF 
    // JOIN 
    //  users U 
    // ON 
    //  U.id = AF.uid 
    // WHERE 
    //  AF.activityId = ? 
} 

Так его своего рода двойник, я до сих пор перебрать все мероприятия после того, как они выбираются в первом запросе, а затем я получаю все пользователи, возможно чтобы объединить эти запросы, поэтому мне не нужно зацикливаться после получения всех действий, и если да, то как?

Спасибо за помощь

ответ

2
SELECT 
    A.description, A.date, A.time,U.id, U.name, U.firstName, U.level 
FROM 
    usersFacebookFriends UF, activitiesUsers AF, activities A, users U 
WHERE 
    UF.uid = :uid AND UF.friendUid=AF.uid AND AF.activityId=A.id AND AF.uid=U.id ; 

Это должно сделать трюк.

+0

Не работает, несколько пользователей могут быть найдены @ одного вида деятельности. – randomKek

+0

@MikeVercoelen Что значит «не работает»? – dgw

+0

запрос работает, но, как я уже сказал, действие может иметь несколько пользователей, связанных, поэтому, когда я выполняю запрос, он даст много результатов. – randomKek