2014-01-21 24 views
0

我有兩個表並且通用性是tid。 $ tid是tourneys的主要關鍵,如果在team_tourney中,那麼球隊會選中它。下面的代碼迴應了一切,如果一個團隊選擇了它,但只刪除每個未選定項目的變量$ tid。你會如何建議我解決我的代理問題。如果這兩個表不共用,則加入下降變量

tables 
    team_tourneys 
    tourneys 

我的SQL是

[email protected]_query("SELECT * 
    FROM tourneys 
    LEFT JOIN team_tourneys 
    ON tourneys.tid = team_tourneys.tid 
    WHERE tourney_state = '$region' AND tourney_start_date >= now() 
    GROUP BY tourneys.tid ORDER BY tourney_start_date ASC 
"); 

if (!$myChoice) 
{ 
    die('<p>Error fetching Tourney details: ' . 
    mysql_error() . '</p>'); 
} 

while ($choice = mysql_fetch_array($myChoice)) 
{ 
    $tid = $choice['tid']; 
    $tourney_name = $choice['tourney_name']; 
    echo '<a href="http://www.mydomain.com/tournament-local.php?&tid='.$tid.'" class="red">'.$tourney_name.'</a></div>' 
} 
+2

放下一個變量?那是什麼? –

回答

1

由於要取出到關聯數組你只需要爲任何選定的列名(或別名)一個時隙。換句話說,您不能有:

array(
    "tid" => 1, 
    "tid" => 2, 
); 

您的查詢將按列出的順序返回所有引用表的所有列。由於這兩個表包含tidteam_tourneys是引用的最後一個表格,所以$choice["tid"]將包含team_tourneys.tid,當然由於LEFT JOIN而可以是NULL

可能解決這個最簡單的方式是讀取tourneys表最後:

SELECT team_tourneys.*, tourneys.* 
FROM tourneys 
LEFT JOIN team_tourneys 
ON tourneys.tid = team_tourneys.tid 
WHERE tourney_state = '$region' AND tourney_start_date >= now() 
GROUP BY tourneys.tid ORDER BY tourney_start_date ASC; 

你真的應該單獨輸入每個列名,但是。使用*是不好的做法。

+0

Starson你是一個聖人。謝謝你,完美的工作! – iconMatrix

+0

我碰到了一個路障。當使用上面的sql時,應該顯示的行之一不是,當使用if語句 'if($ selected =='Y'&& $ team_id == $ id){$ we_selected ='Selected';} \t elseif($ closed =='Y'){$ we_selected ='Closed';} \t else {$ we_selected ='' 有3條記錄全部選中='Y',但正如我所說的,結果中省略了一條,是錯的? – iconMatrix

+0

沒有足夠的信息可以告訴我。你是說查詢本身沒有返回全部三條記錄,或者一旦你得到結果列表返回的結果是PHP代碼中正在處理結果的東西會忽略其中一條記錄? –