2012-10-09 2 views
1

У меня есть следующие таблицы:Объединение три MySQL таблицы/два операторов выбора

http://www.gulllakeschools.net/mysqltables.pdf

enter image description here

мне нужно вытащить данные в этом формате: студента фамилия, студент первое имя , date_event, date_event (на каждый день, когда учащийся вошел в систему) будет одно событие даты.

Компонент com_users - это тот, который мне нужно извлечь из столбца компонента.

Я главный новичок в mysql и не могу понять, как это сделать сразу. У меня есть эти отборочные заявления, которые работают отлично по отдельности:

SELECT civicrm_contact.last_name, civicrm_contact.first_name, civicrm_uf_match.uf_id 
FROM civicrm_contact, civicrm_uf_match 
WHERE civicrm_contact.id = civicrm_uf_match.contact_id 

SELECT user_id, component, group_concat(date_event) 
FROM jos_content_statistics 
WHERE component = "com_users" 
GROUP BY user_id 

но я не могу на всю жизнь соединить их. Я пробовал присоединиться, присоединиться, полное соединение, объединение и все ошибки. Я пробовал соединение до и после операторов where. Союз производит ошибку сопоставления. Я не пробовал внутреннее соединение, потому что я не могу понять этого.

+0

Покажите нам, что вы пробовали с 'JOIN's пожалуйста, –

+0

Как вы хотите присоединиться? Какова связь между таблицами, каковы входные данные и что вы хотите в качестве вывода? – GolezTrol

ответ

0
SELECT 
    civicrm_contact.last_name, 
    civicrm_contact.first_name, 
    civicrm_uf_match.uf_id, 
    (select group_concat(jos_content_statistics.date_event) 
    from jos_content_statistics 
    where user_id = civicrm_uf_match.uf_id 
    and civicrm_uf_match.contact_id = civicrm_contact.id 
    and component = "com_users" 
    GROUP BY user_id) as date_events 
FROM civicrm_contact join civicrm_uf_match 
on civicrm_contact.id = civicrm_uf_match.contact_id 
where civicrm_contact.contact_sub_type='student' 
+0

Это отлично работает. Единственное, что нужно сейчас, это ограничить результаты студентами. Мне нужно, чтобы где-то вроде где civicrm_contact.contact_sub_type = 'student', но я не уверен, как добавить его к вышесказанному. – user1731399

+0

просто проверьте обновленный запрос. – AnandPhadke

+0

Отлично! Большое спасибо! Вы были здравомыслящим. – user1731399

0

Попробуйте это:

SELECT cc.last_name, cc.first_name, cm.uf_id, jc.component, jc.dateevent 
FROM civicrm_contact cc 
INNER JOIN civicrm_uf_match cm ON cc.civicrm_contact.id = cm.contact_id 
INNER JOIN 
(
    SELECT user_id, component, group_concat(date_event) dateevent 
    FROM jos_content_statistics 
    WHERE component = "com_users" 
    GROUP BY user_id, component 
) jc ON cm.uf_id = jc.user_id 
+0

нет идентификатора пользователя в cc (cc.user_id = jc.user_id) – AnandPhadke

+0

@AnandPhadke - Спасибо, я надеюсь, что есть один в 'civicrm_uf_match cm', чтобы мы могли присоединиться к' ON cm.user_id = jc.user_id'. Проблема в том, что ОП не сказал, как присоединиться к двум запросам, все это догадки. –

+0

cm.uf_id = jc.user_id – AnandPhadke

1
SELECT C.last_name, C.first_name, S.date_event 
FROM civicrm_contact as C 
INNER JOIN civicrm_uf_match as M on M.contact_id = C.id 
INNER JOIN jos_content_statistics as S on M.uf_id = S.user_id 
+0

Где находится 'group_concat (date_event)' второго запроса ??? –

+0

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

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