如果两个表都不常见,请加入drops变量

时间:2014-01-21 01:40:41

标签: php mysql sql

我有两张桌子,共同点是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>'
}

1 个答案:

答案 0 :(得分:1)

由于您要获取关联数组,因此只有一个插槽可用于任何选定的列名(或别名)。换句话说,你不能拥有:

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

您的查询将按列表的顺序返回所有引用表的所有列。由于两个表都包含tidteam_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; 是不好的做法。