【问题标题】:How to join two tables with multiple common fields for search filter如何连接具有多个公共字段的两个表以进行搜索过滤器
【发布时间】:2016-04-02 03:12:01
【问题描述】:

我有 2 个表 bpi_registration 和 bpi_teamProfile。 bpi_registration 中的字段为:id, id_school, first_name,last_name,email,city,state,country,bpi_teamProfile 表中的字段为 id_team, team_name, id_student1, id_student2, id_student3 现在 id_student1、id_student2、id_student3 包含与 bpi_registration 中相同的id 学生。我不确定如何连接多个字段。我写的查询如下。如果我错了,请纠正我:

SELECT * FROM bpi_registration
            INNER JOIN bpi_teamProfile
            ON bpi_registration.id=bpi_teamProfile.id_student1
            AND bpi_registration.id=bpi_teamProfile.id_student2
            AND bpi_registration.id=bpi_teamProfile.id_student3
            AND bpi_registration.id=bpi_teamProfile.id_student4
            AND bpi_registration.id=bpi_teamProfile.id_student5

我正在尝试以这样一种方式实现搜索过滤器,即当有人点击团队下拉菜单时,来自 bpi_registrationfirstname,lastname,email,city,state,country 会出现。下面是我的PHP代码

if (isset($_GET['Team']))
{

    		
    		
    $sql="SELECT * FROM bpi_registration
            INNER JOIN bpi_teamProfile
            ON bpi_registration.id=bpi_teamProfile.id_student1
            AND bpi_registration.id=bpi_teamProfile.id_student2
            AND bpi_registration.id=bpi_teamProfile.id_student3
            AND bpi_registration.id=bpi_teamProfile.id_student4
            AND bpi_registration.id=bpi_teamProfile.id_student5"
            
    $userQuery = "{$sql} WHERE bpi_teamProfile.team_name = :team_id";
    $user = $db->prepare($userQuery);
    $user->execute(['team_id' => $_GET['Team']]);
    $selectedUser=$user->fetch(PDO::FETCH_ASSOC);
	

    if(isset($selectedUser))
    {
        echo '<tr>';
        echo '<td>' . $selectedUser['first_name'] . '</td>';
        echo '<td>' . $selectedUser['last_name'] . '</td>';
        echo '<td>' . $selectedUser['email'] . '</td>';
        echo '<td>' . $selectedUser['address_city'] . '</td>'; 
        echo '<td>' . $selectedUser['address_state'] . '</td>'; 
        echo '<td>' . $selectedUser['address_country'] . '</td>';
    echo '</tr>';
    }
}

当我们点击团队过滤器时,URL 看起来像这样 - https://www.example.com/retrieve1.php?Grade=&School=&Team=mary+winners&Students=

但是我无法得到想要的结果。

【问题讨论】:

  • @PiyushGupta 不,我不是
  • 我认为您的查询是正确的,我们不知道您的实际需求,所以您可以更新您的问题吗?......并且您有足够的数据库用于测试目的吗?
  • @PiyushGupta 我现在更新了我的问题。

标签: php mysql sql


【解决方案1】:

给定行中的学生 ID 列似乎不太可能全部映射回相同的 ID(在注册中)...或者查询将正确返回。如果它们不同,是否要“或”加入?

SELECT * FROM bpi_registration
            INNER JOIN bpi_teamProfile
            ON (bpi_registration.id=bpi_teamProfile.id_student1)
            OR (bpi_registration.id=bpi_teamProfile.id_student2)
            OR (bpi_registration.id=bpi_teamProfile.id_student3)
            OR (bpi_registration.id=bpi_teamProfile.id_student4)
            OR (bpi_registration.id=bpi_teamProfile.id_student5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多