PHP/MySQL关系/Echo字段
我正在尝试建立我的第一个关系数据库,到目前为止,它看起来是这样的: 关系表 合作伙伴表 位置表 我想回显我页面上的所有行信息,包括相关的位置名称,如何回显以下内容 ID:2名称:索尔兹伯里清除位置:索尔兹伯里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: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