2011-09-26 179 views
-1

我修改了我的表的名称。 sportevents表是主表,它应该从表中获取其数据:event_date,events,results和members。有没有办法做到这一点。请不要我需要保持这种结构。关系数据库查询MySQL

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']; 

    } 

给了我这样的:

卡鲁周期 - 2008 - 1h14mins

+0

_members_表如何链接到_main_events_表? – Marco

+0

表'members'和'login'表是不是一张表? – Pete171

+0

成员表包含许多字段。在成员和main_events(这是链接表)中有一个名为“id”的字段,有一个字段“id”,它将是main_events.id = members = id – SebastianOpperman

回答

1

我相信你有存储到$ _SESSION [ '成员']或不服成员的数据。我不知道你为什么在事件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']获得。

如果你决定不使用单独的表事件,活动日期,结果和只使用一个表与多个字段U可以做到这一点没有任何LEFT JOINS只是很简单的SELECT查询。

+0

只需注意:[SQL注入](http://en.wikipedia.org/wiki/SQL_injection) – Pred

0

首先,你需要用result链接event。这取决于您的域模型,但我认为每个事件只有一个结果,所以我将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 
+0

我看到你使用别名。是否有必要使用它们? SQl是否会自动选取它们? – SebastianOpperman

+0

这不是必需的,但除此之外,您必须在连接条件中编写全名,即'e.id = me.event_id'变为'event.id = main_event.event_id'。不要明白“自动提取”是什么意思,但是如果你的意思是自动分配的话 - 没有。他们被赋予'结果r'。更详细的方式是'结果为r',所以它是'table_name AS别名',但'as'关键字是可选的。 – J0HN

+0

对不起,我刚刚得到一些错误。与每一个答案。我似乎无法得到这个工作... – SebastianOpperman