2012-04-25 4 views
1

У меня есть следующий запрос:SQL заявление с условием

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position FROM users a groups_members b, WHERE a.uid = b.userid AND b.group_id=$group_var

Это прекрасно работает и приносит обратно все информацию пользователей, а также их позицию в группе для какой-либо определенной группы, что я хочу звонить. Когда группа посещает событие, на этой странице события я хочу вызвать указанную выше функцию, а также дополнительный оператор, который определяет, подтвержден ли этот пользователь. Таким образом, я запускаю следующий запрос:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed FROM users a groups_members b, event_users c WHERE a.uid = b.userid AND b.group_id='$group_var' and c.event_id ='$event_var' and a.uid = c.userid

Это также прекрасно работает, но вот здесь возникает моя проблема. Предположим, что определенная группа создала событие, а затем все пользователи были сброшены в таблицу event_users. Мой второй запрос все равно будет работать и показывать каждого пользователя в этой группе, а также его и ее и подтвержденные настройки, но когда новый пользователь присоединяется к группе и выбирает его или ее позицию, этот новый пользователь не возвращается в моем втором запросе и, следовательно, событие, которое показывает всех пользователей вместе с их позицией, не учитывает новых пользователей, которые были добавлены после создания события.

Я надеюсь, что это не звучит слишком запутанно. Вот мои таблицы:

event_users || id, event_id, userid, confirmed  

groups_members || id, userid, group_id, position 

users || uid, name_f, name_l, profile 

Мой вопрос, как я могу в принципе собрать все из нынешних членов группы, а затем, если они были введены в таблицу event_users, что их подтвердил статус. Я не хочу, чтобы выполнять запросы на моей странице группы, которая составляет для новых пользователей и помещает их в каких-либо событий, которые группа имеет

+0

Я немного запутался. Вы хотите автоматически добавлять пользователя к событию, если пользователь присоединяется к группе, которая создала событие? Если это так, вы можете создать таблицу пар групп/событий, а когда вы добавите пользователя в группу, посмотрите, создала ли эта группа какие-либо события, и, если это так, добавьте пользователя в событие. Или вы хотите, чтобы пользователи, которые присоединились к группе поздно, появлялись как неподтвержденный пользователь событий? Выполнение этого кажется отрывочным, потому что оно фактически не отражает данные. – Justin

+0

Нет, я хочу выбрать членов группы, входящих в группу. Моя проблема заключается в том, что когда я запускаю запрос, который нуждается в подтвержденных данных, возвращаются только те пользователи, которые были добавлены в таблицу событий при первом создании события. Пользователи, присоединившиеся к группе после создания события, не будут возвращены, и я не могу изменить таблицу событий для учетной записи для новых пользователей. – user1011713

ответ

2

Используйте левую присоединяется:

SELECT 
     a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed 
    FROM users a 
    JOIN groups_members b on a.uid = b.userid 
    LEFT JOIN event_users c on a.uid = c.userid 
    WHERE b.group_id='$group_var' and c.event_id ='$event_var' 

Вы будете получать NULL в качестве значения c.confirmed, если в таблице event_users нет соответствующей записи. Вы можете использовать функцию Coalesce() поставить там значение по умолчанию:

 coalesce(c.confirmed, 0) 

или

 coalesce(c.confirmed, 'not subscribed yet') 
+0

Привет, barbalion, я до сих пор получаю только тех пользователей, которые уже были в случае, когда возвращалась таблица пользователей, а не всех членов группы. – user1011713

+0

Любые другие советы? – user1011713

+0

К сожалению, я виноват. Это действительно трюк. Я вручную переместил некоторые данные таблицы и не работал ранее. Еще раз спасибо! – user1011713

Смежные вопросы