PHP/MySQL关系/Echo字段

PHP/MySQL关系/Echo字段,php,mysql,Php,Mysql,我正在尝试建立我的第一个关系数据库,到目前为止,它看起来是这样的: 关系表 合作伙伴表 位置表 我想回显我页面上的所有行信息,包括相关的位置名称,如何回显以下内容 ID:2名称:索尔兹伯里清除位置:索尔兹伯里 ID:4名称:中间清除位置:南安普敦索尔兹伯里 ID:5名称:南安普敦清除位置:南安普敦 ====解决了===== $sql = "SELECT partner_id, partner_name, email_address, active FROM partners WHERE a

我正在尝试建立我的第一个关系数据库,到目前为止,它看起来是这样的:

关系表

合作伙伴表

位置表

我想回显我页面上的所有行信息,包括相关的位置名称,如何回显以下内容

ID:2名称:索尔兹伯里清除位置:索尔兹伯里
ID:4名称:中间清除位置:南安普敦索尔兹伯里
ID:5名称:南安普敦清除位置:南安普敦

====解决了=====

$sql = "SELECT partner_id, partner_name, email_address, active FROM partners WHERE active ='yes' ORDER BY partner_id ASC";


                                $connect->query($sql);

                                if ($partners = $connect->query($sql)) {

                                    foreach ($partners as $partner) {

                                        echo '<li><ul>';
                                        echo '<li>' . $partner['partner_id'] . '</li>';
                                        echo '<li>' . $partner['partner_name'] . '</li>';
                                        echo '<li>' . $partner['email_address'] . '</li>';
                                        echo '<li>' . $partner['active'] . '</li>';

                                        // START GET LOCATIONS FROM RELATED TABLE
                                        echo '<ul>';

                                        $sql2 = "SELECT p.partner_name AS Name, p.partner_id AS ID, l.location_name AS Locations from partners_locations r, partners p, locations l WHERE p.partner_id = r.partner_id AND l.location_id = r.location_id AND r.partner_id =" . $partner['partner_id'] . "";

                                        $connect->query($sql2);

                                        if ($locations = $connect->query($sql2)) {

                                            foreach ($locations as $location) {

                                                echo '<li>' . $location['Locations'] . '</li>';
                                            }

                                        } else {

                                            echo "Error: No Locations<br>";

                                        }

                                        echo '</ul>';
                                        // END GET LOCATIONS FROM RELATED TABLE

                                        echo '</ul></li>';

                                    }

                                } else {

                                     echo "Error: No Active Partners<br>";

                                }
$sql=“选择合作伙伴id、合作伙伴名称、电子邮件地址、来自合作伙伴的活动地址,其中活动='yes'按合作伙伴id ASC订购”;
$connect->query($sql);
如果($partners=$connect->query($sql)){
foreach($合伙人作为$合伙人){
回音“
    • ”; 回显“
    • ”.$partner['partner_id']。
    • ”; 回显“
    • ”.$partner['partner_name']。
    • ”; 回显“
    • ”.$partner['email_address']。
    • ”; 回显“
    • ”.$partner['active']。
    • ”; //开始从相关表获取位置 回声“
        ”; $sql2=“选择p.partner_名称作为名称,p.partner_id作为id,l.location_名称作为地点,从partners_地点r、partners p、地点l中选择p.partner_id=r.partner_id和l.location_id=r.location_id和r.partner_id=“.$partner['partner_id'”; $connect->query($sql2); 如果($locations=$connect->query($sql2)){ foreach($locations作为$location){ 回显“
      • ”.$location['Locations]”。
      • ; } }否则{ echo“错误:没有位置
        ”; } 回声“
      ”; //结束从相关表获取位置 回音“
  • ”; } }否则{ echo“错误:没有活动的合作伙伴
    ”; }
    首先,您的表表:Partners条目应如下所示

    partener_id   | partner_name     |  email_address | active | location_id
    2               Test Partner        .......         yes         1
    5               Good Removals       .......         yes         1
    5               Good Removals       .......         yes         2
    4               Special Removals    .......         yes         2
    
    因此,您可以使用Table:Locations进行连接

    然后执行下面的sql查询

     $sql = "select * from partners Left join locations on locations.location_id=partners.location_id";
    
    以便更好地理解查询执行和数据显示。点击下面的链接

    
    

    伙伴表中的“Load”字段是错误的,您必须创建另一个表来处理合作伙伴和位置之间的关系,称为LooStsPartners的示例。此表必须有两个字段,位置id和合作伙伴id。这样,您可以将多个合作伙伴与多个位置关联起来。然后,您的代码应该如下所示:

    <?php
    $servername = "www.server.com";
    $username = "username";
    $password = "password";
    $dbname = "your database name";
    
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    
    $sql = "SELECT partner_id, partner_name, location_name FROM Partners 
    INNER JOIN Locations_Partners ON Partners.partner_id = Locations_Partners.Partner_id
    INNER JOIN Locations ON Locations_Partners.Location_id = Locations.location_id";
    $result = $conn->query($sql);
    
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo "id: " . $row["id"]. " - Name: " . $row["partner_name"]. " " . $row["location_name"]. "<br>";
        }
    } else {
        echo "0 results";
    }
    $conn->close();
    ?>
    

    最好的方法是创建一个新表,其中包含
    合作伙伴id
    位置id

    tbl\u新关系

    此方法的优点:-

    1) 。当您需要从合作伙伴中删除位置时,无需编辑列
    位置
    。您可以简单地从这个新表中删除一个条目

    2) 。当您需要在
    locations
    字段中添加更多数据时,只需插入到新表中即可,而无需更新
    partners.locations

    现在,您可以使用easy
    左连接来获取所需的数据。
    我的表解决方案的SQL查询

    SELECT t.*,p.*,l.* FROM tbl_relationships_new t, partners p, locations l LEFT JOIN 
        partners 
        ON
        t.partner_id = p.partner_id 
        LEFT JOIN 
        locations 
        ON 
        l.location_id = t.location_id 
        WHERE
        t.partner_id = 2
    
    更新

    以下是基于表结构的查询

    1) 。ID:2名称:索尔兹伯里搬迁地点:索尔兹伯里

    2) 。当有两个位置时

    SELECT p.partner_name AS Name, p.partner_id AS ID, l.location_name AS Locations from relationships r, partners p, locations l WHERE p.partner_id = r.partner_id AND l.location_id = r.location_id AND r.partner_id = 5
    

    更新

    解决方案,但不明确提及ID

    SELECT p.partner_name AS Name, p.partner_id AS ID, l.location_name AS Locations from relationships r, partners p, locations l WHERE p.partner_id = r.partner_id AND l.location_id = r.location_id
    

    您尝试了什么来获取合作伙伴和位置数据?每个字段的值应该是原子的。partners.location列不应包含多个值。添加一个新表以加入partners和location,并从partners表中删除location列。在听取一些建议后,我已更新了问题,请告诉我您的想法!出于几个原因,您的初始结构可能与新结构一样好。我为第一个版本提供了一个完整的解决方案,它提供了您要求的准确结果,@vacsora我想知道第一个结构的优势是什么……复制合作伙伴数据是个坏主意。@X.L.Ant最好复制数据以进行适当的连接,以获得有效的结果。我已经更新了我的答案,请检查。不,不是更好。您最终会得到重复的数据(这是数据库中的反模式),在更新时会出现错误
    update partners在location_id=1时设置了一些内容,您的数据被破坏。@X.L.Ant location_id不同。在我的情况下,partners表是主表。但我想创建一个关系表以保持其整洁。感谢这些信息,我现在已更新了问题@Bradhuston好的,现在检查更新的问题。看起来它有潜力,但我正在运行一个循环,所以r.partner\u id将是动态的。我刚刚意识到我没有添加代码,2秒。@bradhuston-Erm,我没有看到任何循环,除了foreach是prin
    
    SELECT p.partner_name AS Name, p.partner_id AS ID, l.location_name AS Locations from relationships r, partners p, locations l WHERE p.partner_id = r.partner_id AND l.location_id = r.location_id AND r.partner_id = 5
    
    SELECT p.partner_name AS Name, p.partner_id AS ID, l.location_name AS Locations from relationships r, partners p, locations l WHERE p.partner_id = r.partner_id AND l.location_id = r.location_id