[英]Joining mysql tables
I have 2 tables 我有2张桌子
usrfrnd_table usrfrnd_table
user_id friend_id
__________________
1 2
2 5
3 1
2 1
and usr_table 和usr_table
id fullname
________________
1 John Doe
2 George Cann
...
How to echo all friends of for example id 2 from table usr_table with loop? 如何用循环从表usr_table回显所有ID为2的朋友? Tried this piece of code, but it doesn't work:
尝试了这段代码,但是不起作用:
$stmt = "SELECT fullname FROM usr_table INNER JOIN usrfrnd_table ON usr_table.id=usrfrnd_table.friend_id WHERE usrfrnd_table.user_id='$id'";
$result=$db->query($stmt);
foreach($result as $rec){
echo "<li><a href=user.php?id=".$rec['id']."'>". $rec['fullname'] . "</a></li>";
}
tried this one also doesn't work: 尝试过这个也不起作用:
$stmt = "select fullname from usr_table inner join usrfrnd_table ON (usr_table.id = usrfrnd_table.friend_id) WHERE usrfrnd_table.user_id ='$id'";
$result=$db->query($stmt);
foreach($result as $rec){
echo "<li><a href=user.php?id=".$rec['id']."'>". $rec['fullname'] . "</a></li>";
where am I wrong? 我哪里错了?
<?php
error_reporting(E_ALL);
require "db.php";
if(isset($_GET['id']))
{
$id=$_GET['id'];
$result=$db->query("SELECT * FROM usr_table WHERE id='$id' LIMIT 1") or die(printf("Səhv1: %s\n", $db->error));
$data=$result->fetch_object();
$fullname=$data->fullname;
$dob = $data->dob;
$phone= $data->phone;
$adress= $data -> adress;
$school = $data->school;
$info = $data->info;}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$fullname?> | BAZA</title>
<link type="text/css" href="styles/user.css" rel="stylesheet" />
</head>
<body>
<body>
<div id="address"><?=$adress?></div>
<h1><?=$fullname?></h1>
<div id="contact"><?=phone?><a href="" target="_blank" muse_scanned="true">emailaddress@uwaterloo.ca</a></div>
<div class="section">
<h2>Summary of Qualifications</h2>
<ul>
<li>Bullet one Bullet one</li>
<li>Bullet two Bullet two</li>
<li>Bullet three Bullet three</li>
<li>Bullet four Bullet four</li>
<li>Bullet five Bullet Five</li>
</ul>
</div>
<div class="section">
<h2>Work Experience</h2>
<div class="content">
<span class="date">Start » End Year</span>
<h3>Job Title One</h3>
<address>Company Name, Address, City Province</address>
<ul>
<li>Bullet one Bullet one</li>
<li>Bullet two Bullet two</li>
<li>Bullet three Bullet three</li>
<li>Bullet four Bullet four</li>
</ul>
<span class="date">Start » End Year</span>
<h3>Job Title Two</h3>
<address>Company Name, Address, City Province</address>
<ul>
<li>Bullet one Bullet one</li>
<li>Bullet two Bullet two</li>
<li>Bullet three Bullet three</li>
<li>Bullet four Bullet four</li>
</ul>
<span class="date">Start » End Year</span>
<h3>Job Title Three</h3>
<address>Company Name, Address, City Province</address>
</div>
</div>
<div class="section">
<h2>Yaxın adamlar</h2>
<div class="content">
<span class="date">Dostlar</span>
<h3>Volunteer Job Title</h3>
<address>Company Name, Address, City Province</address>
<ul>
<?php
$stmt = "select U.* from usr_table U
join usrfrnd_table F on U.id=F.friend_id
where F.user_id='$id'
union distinct select U.* from usr_table U
join usrfrnd_table F on U.id=F.user_id
where F.friend_id='$id'";
$result=$db->query($stmt);
foreach($result as $rec){
echo "<li><a href=user.php?id=".$rec['id']."'>". $rec['fullname'] . "</a></li>";
}
?>
</ul>
</div>
</div>
<div class="section">
<h2>Təhsil</h2>
<ul>
<li>Candidate for Bachelor of Major, University, Province, StartYear - Present</li>
<li>OSSD, Highschool, Town, Province, StartYear-EndYear</li>
</ul>
</div>
<div class="section">
<h2>Academic Awards</h2>
<ul>
<li>Year, Year, Name of award/Scholarship</li>
</ul>
</div>
</body>
</html>
I believe that the trouble is in your PHP, not your SQL. 我相信问题出在您的PHP,而不是您的SQL。 Try this:
尝试这个:
$result = $db->query($stmt);
while ($rec = $result->fetch_array()) {
echo "<li><a href=user.php?id=".$rec['id']."'>". $rec['fullname'] . "</a></li>";
}
You appear to be using the mysqli extension. 您似乎正在使用mysqli扩展名。 In that case,
$db->query()
returns a result object, not an array. 在这种情况下,
$db->query()
返回结果对象,而不是数组。 You have to repeatedly call fetch_array()
on the result object to get each row in the result set. 您必须在结果对象上重复调用
fetch_array()
才能获得结果集中的每一行。
Also, I recommend that you use this as your query (but that isn't the immediate issue): 另外,我建议您将此查询用作查询(但这不是直接的问题):
select U.* from usr_table U
join usrfrnd_table F on U.id=F.friend_id
where F.user_id=2
union distinct select U.* from usr_table U
join usrfrnd_table F on U.id=F.user_id
where F.friend_id=2;
Join the table usrfrnd_table using user_id, and not friend_id: 使用user_id(而不是friend_id)加入表usrfrnd_table:
$stmt = "SELECT fullname FROM usr_table INNER JOIN usrfrnd_table ON usr_table.id=usrfrnd_table.user_id WHERE usrfrnd_table.user_id='$id'";
$result=$db->query($stmt);
foreach($result as $rec){
echo "<li><a href=user.php?id=".$rec['id']."'>". $rec['fullname'] . "</a></li>";
}
Get rid of the single apostrophes around $id, it's an int, so they aren't necessary. 除去$ id周围的单撇号,它是一个int,因此它们不是必需的。 Also, you need to call fetch_assoc on $result and check to make sure it isn't NULL:
另外,您需要在$ result上调用fetch_assoc并检查以确保它不是NULL:
$stmt = "SELECT fullname ".
"FROM usr_table ".
"INNER JOIN usrfrnd_table ".
" ON usr_table.id = usrfrnd_table.friend_id ".
"WHERE usrfrnd_table.user_id = $id";
if ($result = $db->query($stmt)) {
while ($rec = $result->fetch_assoc()) {
echo "<li><a href=user.php?id=".$rec['id'].">".$rec['fullname']."</a></li>";
}
$result->free();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.