2011-09-26 178 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