baza danych rejestracja na spotkania

0

Hej chce trzymać w bazie takie dane: użytkownicy, spotkania oraz powiązać userów z spotkaniami tak żeby wiedzieć na które spotkania jacy użytkownicy się zarejestrowali. Dodatkowo chce też wiedzieć czy użytkownik po zarejestrowaniu na to spotkanie był na nim czy nie. Zrobiłem taką strukturę:
http://sqlfiddle.com/#!9/233eca/42
Czy jest ok? czy może dane o tym czy user był na spotkaniu trzymać w tabeli registered w osobnej kolumnie np "visited"?
Jesli taka struktura jak obecnie to czy w jednym zapytaniu jestem w stanie pobrać ilość spotkań na które się zarejestrował i na których był?
W tej chwili mam takie zapytanie:

SELECT count(registered.meeting_id) as na_ilu_byl, users.name
FROM users 
left join registered on users.id = registered.user_id

group by users.id

I pobiera ono ilość spotkań na które zarejestrował się konkretny użytkownik - czy przy obecnej strukturze da się do tego samego zapytania dodać też ilość spotkań na których był?

0

Tak, mozna:

SELECT count(visited.meeting_id) as na_ilu_byl,count(registered.meeting_id) as na_ile_sie_zapisal, users.name
FROM users 
left join registered on users.id = registered.user_id
left join visited on registered.meeting_id = visited.meeting_id
group by users.id

W danych masz niespójność, użytkownik Wacław (3) jest zarejestrowany na spotkania: 3,4, a według tabeli visited był na: 1, ja osobiscie bym nie robił tabeli visited, tylko dodał to do tabeli registerd/meeting zależy od potrzeb

0

@Panczo: zakładając Twoją wersję czy takie zapytanie jak tutaj http://sqlfiddle.com/#!9/94f8e/2 jest ok do wyświetlenia na ile sie zapisał i na ilu byl?

0

Tak, ja bym jednak zmienił typ na bit

0

Mam jeszcze pytanie dla tej struktury: http://sqlfiddle.com/#!9/94f8e/3 zapytanie

SELECT*
FROM users 
left join registered on users.id = registered.user_id
``` Pobierz użytkowników i meetingi na których byli - jak pobrać analogiczne dane ale tak żeby były meetingi na których użytkownicy nie byli ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1