我有两张桌子,共同点是tid。 $ tid是tourneys的主键,如果它在team_tourney中,则团队选择它。如果一个团队选择了它,那么下面的代码会回显所有内容,但只会删除每个非选定项目的变量$ tid。你怎么建议我解决我的问题。
tables
team_tourneys
tourneys
我的sql是
$myChoice=@mysql_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>'
}
答案 0 :(得分:1)
由于您要获取关联数组,因此只有一个插槽可用于任何选定的列名(或别名)。换句话说,你不能拥有:
array(
"tid" => 1,
"tid" => 2,
);
您的查询将按列表的顺序返回所有引用表的所有列。由于两个表都包含tid
而team_tourneys
是引用的最后一个表,$choice["tid"]
将包含team_tourneys.tid
,由于{{1}当然可以NULL
}}
解决此问题的最简单方法可能是最后阅读LEFT JOIN
表:
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;
是不好的做法。