【问题标题】:Join query and what do I do with it to display data correctly?加入查询,我该怎么做才能正确显示数据?
【发布时间】:2010-09-16 23:35:14
【问题描述】:

我有一张桌子,里面存放着所有的志愿者,每个志愿者都会被分配到一个合适的场地来开展活动。有一张桌子可以存放所有的场地。

它将志愿者的适当场地分配存储到列venue_id

table: venues
columns: id, venue_name

table: volunteers_2009
columns: id, lname, fname, etc.., venue_id

这是显示志愿者列表的功能,我遇到的问题是显示他们的场地分配。我从来没有过多地使用 MySQL 连接,因为这是我第一次将两个表连接在一起以获取我需要的适当信息。

所以我希望它去到志愿者_2009 表,获取场地_id,去场地表,匹配volunteers_2009.venue_id to venues.id,显示venues.venue_name,所以在列表中它会显示志愿者的场地分配。

<?php
// -----------------------------------------------------
//it displays appropriate columns based on what table you are viewing
function displayTable($table, $order, $sort) {
    $query = "select * from $table ORDER by $order $sort";
    $result = mysql_query($query);

    // volunteer's venue query
    $query_venues = "SELECT volunteers_2009.venue_id, venues.venue_name FROM volunteers_2009 JOIN venues ON volunteers_2009.venue_id = venues.id";
    $result_venues = mysql_query($query_venues);

    if($_POST) { ?>
        <table id="box-table-a">
        <tr>
            <th>Name</th>
            <?php if($table == 'maillist') { ?>
                <th>Email</th>
            <?php } ?>
            <?php if($table == 'volunteers_2008' || $table == 'volunteers_2009') { ?>
                <th>Comments</th>
            <?php } ?>
            <?php if($table == 'volunteers_2009') { ?>
                <th>Interests</th>
                <th>Venue</th>
            <?php } ?>
            <th>Edit</th>
        </tr>
        <tr>
        <?php
        while($row = mysql_fetch_array($result))
        {
            $i = 0;
            while($i <=0)
            {
                print '<td>'.$row['fname'].' '.$row['lname'].'</td>';
                if($table == 'maillist') {
                    print '<td><a href="mailto:'.strtolower($row['email']).'">'.strtolower($row['email']).'</a></td>';
                }
                if($table == 'volunteers_2008' || $table == 'volunteers_2009') {
                    print '<td><small>'.substr($row['comments'], 0, 32).'</small></td>';
                }
                if($table == 'volunteers_2009') {
                    print '<td><small>1) '.$row['choice1'].'<br>2) '.$row['choice2'].'<br>3) '.$row['choice3'].'</small></td>'; ?>
                    <td> <?php
                            if($row_venues['venue_name'] != '') {
                                // print venue assigned
                                print $row_venues['venue_id'].' '.$row_venues['venue_name'].' ';
                            } else { print 'No Venue Assigned'; } ?>
                    </td> <?php
                } ?>
                <td><a href="?mode=upd&id=<?= $row[id] ?>&table=<?= $table ?>">Upd</a> / <a href="?mode=del&id=<?= $row[id] ?>&table=<?= $table ?>" onclick="return confirm('Are you sure you want to delete?')">Del</a></td> <?php
                $i++;
            }
        print '</tr>';
        }
        print '</table>';
    }
}
// -----------------------------------------------------
?>

【问题讨论】:

  • 请注意,使用宽度超过 630 像素的图像会导致格式对笔记本电脑大小的分辨率造成混乱 - 我建议编辑 img 链接以设置 630 像素的宽度。谢谢!

标签: php mysql


【解决方案1】:

我无法添加任何评论,但语法 从场地、志愿者_2009 中选择 field1、field2、field3,其中志愿者_2009.venue_id =venues.id 只会给你有场地的志愿者;不是那些没有场地的人。

【讨论】:

  • 我想浏览表格并显示场地名称,如果没有,则显示“未分配场地”。我遇到的问题是为每个志愿者显示适当的场地名称。现在我可以只显示场地名称,但它们不会显示在相应的志愿者旁边。
【解决方案2】:

通用 SQL 左外连接语法。

选择志愿者.id、志愿者.lname、志愿者.fname、志愿者.venue_id、场所.venue_name FROM Volunteers_2009 作为志愿者 LEFT OUTER JOIN Venues ON (Volunteers.venue_id = Venues.id)

【讨论】:

  • 谢谢。 $query = "选择义工_2009.id,义工_2009.lname,义工_2009.fname,义工_2009.venue_id,venues.venue_name FROM义工_2009 AS义工_2009 LEFT OUTER JOIN places ON (volunteers_2009.venue_id =venues.id) ORDER by $order $sort";
【解决方案3】:

从场所、志愿者_2009 中选择字段 1、字段 2、字段 3,其中志愿者_2009.venue_id = 场所.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多