关系数据库查询MySQL

时间:2011-09-26 08:26:34

标签: php mysql database relational

我修改了表格的名称。 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 - 1h14mins

2 个答案:

答案 0 :(得分:1)

我认为您将成员的数据存储在$ _SESSION ['member']或smth中。我不确切地知道为什么你在事件,event_date上分离了tabes(在我的观点中应该有一个),我猜main_events就像事件的组/类别。

并且您缺少会员 - 活动链接。将字段'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'];

获得

活动ID,活动名称,活动年份,结果。 “JohnSmith”你可以从$ _SESSION ['member']获得。

如果您决定不为事件,event_date,result使用单独的表,并且只使用一个包含更多字段的表,则可以在没有任何LEFT JOINS的情况下执行此操作,只需非常简单的SELECT查询。

答案 1 :(得分:0)

首先,您需要将eventresult相关联。这取决于您的域模型,但我假设您每个事件只有一个结果,因此我会将result_id添加到events表中。此外,您需要以某种方式链接成员events,我将使用

events_members
member_id
main_event_id

表。通过这种诅咒,您将能够让多个成员参与多个活动。

最后,查询将如下所示:

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