MySQL SELECT使用选定的表作为唯一标识符

时间:2014-05-01 18:03:42

标签: php mysql

我在查找问题的解决方案时遇到问题,因为我是mysql的新手。以下代码有效:

<?php
//execute the SQL query and return records
$result = mysql_query("SELECT Event.id, Event.type, Event.eventclass, Event.venue,
                       date_format(Event.startdate, '%a %b %e %Y') as sort_startdate,
                       date_format(Event.enddate, '%a %b %e %Y') as sort_enddate,
                       Event.datespecifics, Event.registration,
                       Event.instructor1, Event.instructor2, Event.instructor3,
                       Venue.name, Venue.city
                       FROM Event,Venue
                       Where Event.type = '200HR Teacher Training' AND Event.venue = Venue.id
                       ORDER BY startdate ASC");
//fetch the data from the database
while ($row = mysql_fetch_array($result)) {
    if(empty($row{instructor2})) {
        echo "<p>At ".$row{name}.", ".$row{city}."<br/>".$row{sort_startdate}." - ".$row{sort_enddate}.", ".$row{datespecifics}."<br/>With: " .$row{instructor1}."</p> <br/><br/>";
    }
    else {
        if(empty($row{instructor3})) {
            echo "<p>At ".$row{name}.", ".$row{city}."<br/>".$row{sort_startdate}." - ".$row{sort_enddate}.", ".$row{datespecifics}."<br/>With ".$row{instructor1}." and ".$row{instructor2}."</p> <br/><br/>";
        }           
        else {
            echo "<p>At ".$row{name}.", ".$row{city}."<br/>".$row{sort_startdate}." - ".$row{sort_enddate}.", ".$row{datespecifics}."<br/>With ".$row{instructor1}.", ".$row{instructor2}." and ".$row{instructor3}."</p> <br/><br/>";
        }       
    }
}
?>

问题是instructor1,instructor2和instructor3的输出是一个整数,它引用另一个列出所有教师的表。我不知道如何从该表中显示教师的名字。我假设我需要在SELECT语句中创建一个变量,这样我就可以给每个名称一个唯一的标识符,但我不知道如何这样做。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是通过JOIN操作完成的。这是一个非常简单的交易。

你需要这个:

SELECT ...whatever...,
        e1.instructor_name AS instr1, 
        e2.instructor_name AS instr2,
        e3.instructor_name AS instr3,
        Venue.name, Venue.city
  FROM Event
  JOIN Venue ON Event.venue = Venue.id
  LEFT JOIN Instructor AS e1 ON Event.instructor1 = e1.instructor_id
  LEFT JOIN Instructor AS e2 ON Event.instructor2 = e2.instructor_id
  LEFT JOIN Instructor AS e3 ON Event.instructor3 = e3.instructor_id
 Where Event.type = '200HR Teacher Training'
 ORDER BY startdate ASC

注意,因为你需要选择三个不同的教师,你需要连接三次教师表,并给它三个不同的别名AS e1等。

我使用LEFT JOIN,因为如果您的活动不是全部三位教师,那么这仍然有效。

我不确定教师表的布局(或确实是名称),所以这里有一些猜测。