Запрос реляционной базы данных MySQL - PullRequest
0 голосов
/ 26 сентября 2011

Я изменил названия своих таблиц.Таблица sportevents является основной таблицей, и она должна получать свои данные из таблиц: event_date, events, results и members.Есть ли способ сделать это.Пожалуйста, не нужно мне сохранять эту структуру.

sportevents (link table)
• id
• event_id
• date_id
• result_id

event_date
• id
• date

events
• id
• eventname

results
• id
• result

members
• id (the ID number of a person)

userlogin
• id
• username
• password

Мне удалось сделать это правильно без объединений.Следующее:

$query = "SELECT * FROM members, sportevents, dates, results, event, userlogin ". 
         "WHERE userlogin.username = '$un' " . 
         "AND sportevents.id = members.id " . 
         "AND sportevents.event_id = event.id " .
         "AND sportevents.date_id = dates.id " .
         "AND sportevents.result_id = results.id";

$results = mysql_query($query)
    or die(mysql_error());
    while ($row = mysql_fetch_array($results)) {
    echo $row['eventname'];
    echo " - ";
    echo $row['year'];
    echo " - ";
    echo $row['result'];

    }

Дает мне это:

Karoo Cycle - 2008 - 1 ч 14 мин

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Я предполагаю, что у вас есть данные участника, хранящиеся в $ _SESSION ['member'] или что-то в этом роде.И я не знаю точно, почему вы разделили вкладки на событие, событие_дата (в моей перспективе должна быть одна), и я предполагаю, что main_events - это что-то вроде группы / категории события.

, и вам не хватает MEMBER - ссылка на EVENT,добавьте поле 'member_id' в таблицу событий.

Если это то, что есть, то это что-то вроде этого.

$q = 'SELECT e.*, ed.year, r.result FROM events As e 
LEFT JOIN event_date As ed ON ed.id = e.id
LEFT JOIN result As r ON r.id = e.id
WHERE e.member_id = ' . $_SESSION['member']['id'];

, из которого вы получите

идентификатор события, событиеназвание, год события, результат.«JohnSmith» вы можете получить от $ _SESSION ['member'].

Если вы решите не использовать отдельные таблицы для события, event_date, result и использовать только одну таблицу с большим количеством полей, вы можете сделать это без LEFTСОЕДИНЯЕТСЯ просто очень простой запрос SELECT.

0 голосов
/ 26 сентября 2011

Во-первых, вам нужно связать event с result.Это зависит от модели вашего домена, но я предполагаю, что у вас есть только один результат на событие, поэтому я добавлю result_id в таблицу events.Кроме того, вам нужно как-то связать участников с events, я буду использовать таблицу

events_members
member_id
main_event_id

.С помощью этого vcersion вы сможете принимать участие нескольких участников в нескольких событиях.

И, наконец, запрос будет выглядеть примерно так:

select m.username, e.eventname, y.year, r.result
from members m
join events_members em on em.member_id = m.id
join main_events me on em.main_event_id = me.id
join event e on e.id = me.event_id
join year y on y.id = me.year_id
join result r on r.id = e.result_id
where m.username = $username
...