左加入 while 循环 PHP
Left join with a while loop PHP
我的代码:
// variables
$user_id = $_SESSION['user_ID']; // session ID
// query db for user info
$get_info = $conn->prepare("SELECT users.user_id, users.first_name,
users.last_name,
users.country_origin,
users.looking_for,
users.exp_yrs,
users_skills.user_id,
users_skills.user_skill
FROM `users`
LEFT JOIN `users_skills`
ON users.user_id = ?
AND users_skills.user_id = users.user_id
$get_info->bind_param('s',$user_id);
$get_info->execute();
$row_user_details = $get_info->get_result()->fetch_Assoc(); // get result
<div class="col"><label class="input-filled"><input name="first_name" required value="<?php echo $row_user_details['first_name']; ?>">
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['last_name']; ?>">
While(" i can't use $row_user_details = $get_info->fetch_Assoc()"){
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['user_skill']; ?>">
}
我不确定要在 while () 中放什么,因为我需要在 while 循环之外使用查询的值,正如您从代码中看到的那样,我已经使用了 1-2 年小时,就是想不通
user_skill 是具有相同 user_id 的多个数据合二为一 table
其中名字和姓氏只是用户行中的一个值
数据库布局:
users_skills TABLE:
ID | user_id | user_skill |
1 | 1 | something1 |
2 | 1 | something2 |
3 | 1 | something3 |
4 | 2 | somethine4 |
5 | 6 | somethine5 |
users TABLE:
user_id | first_name | last_name | some more stuff |
1 | john | key | secrets |
会话 ID = user_id // 在本例中为 1
此代码已缩短,因此不会向 public 泄露信息,但它的工作原理相同
您的查询给出了这个:
http://sqlfiddle.com/#!9/418d0b/1
SELECT users.user_id, users.FirstName,
users.LastName,
users.Address,
users.City,
users_skills.user_id,
users_skills.skill
FROM `users`
LEFT JOIN `users_skills`
ON users.user_id = 1
AND users_skills.user_id = users.user_id
user_id FirstName LastName Address City user_id skill
1 Tom B Erichsen 4006 Stavanger Stavanger 1 Erichsen
1 Tom B Erichsen 4006 Stavanger Stavanger 1 Tom B
1 Tom B Erichsen 4006 Stavanger Stavanger 1 4006 Stavanger
2 Tom B John 4006 Stavanger Stavanger (null) (null)
3 Tom B Tes 4006 Stavanger Stavanger (null) (null)
4 Tom B Smith 4006 Stavanger Stavanger (null) (null)
5 Tom B Jane 4006 Stavanger Stavanger (null) (null)
你能告诉我你想达到什么目的吗?我假设您希望每个用户都获得他的技能?还是仅针对会话用户?
为所有用户获取所有技能
SELECT users.user_id, users.FirstName,
users.LastName,
users.Address,
users.City,
users_skills.user_id,
users_skills.skill
FROM `users`
LEFT JOIN `users_skills`
ON users_skills.user_id = users.user_id
获得用户 1 的所有技能
users.LastName,
users.Address,
users.City,
users_skills.user_id,
users_skills.skill
FROM `users`
LEFT JOIN `users_skills`
ON users_skills.user_id = users.user_id
WHERE users.user_id = 1
一个想法:
我会选择不同的方式
创建一个获取技能的函数
function getUserSkills($userId){
global $conn;
$query = "SELECT * ";
$query .= "FROM users_skills ";
$query .= "WHERE user_id=" . $userId . " ";
$skillset = mysqli_query($conn, $query);
$results = array();
while ($skill = mysqli_fetch_assoc($skillset)){
$results[] = $skill;
}
return $results;
}
然后需要用户技能的时候调用就可以了
$userid = sql_prep($_SESSION['userid']);
$skills = getUserSkills($userid);
foreach ($skill as $skills) {
echo $skill['skill_name']. '<br>';
}
getUser($user_id)可能相同
好的,
因此,如果您已经拥有
<div class="col"><label class="input-filled"><input name="first_name" required value="<?php echo $row_user_details['first_name']; ?>">
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['last_name']; ?>">
问题是这一行
While(" i can't use $row_user_details = $get_info->fetch_Assoc()"){
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['user_skill']; ?>">
}
您可以将其重写为
$user_skill = '';
while($row_user_details = $get_info->fetch_Assoc()) {
$user_skill .= ' '.$row_user_details['user_skill'];
}
<div class="col">
<label class="input-filled"><input name="last_name" required value="<?php echo $user_skill; ?>">
</div>
此外,您必须向 SQL 查询添加 WHERE 子句才能仅获取特定的 user_id.
这样您将在一栏中获得 $userskill。
我希望我明白你想做什么。
我的代码:
// variables
$user_id = $_SESSION['user_ID']; // session ID
// query db for user info
$get_info = $conn->prepare("SELECT users.user_id, users.first_name,
users.last_name,
users.country_origin,
users.looking_for,
users.exp_yrs,
users_skills.user_id,
users_skills.user_skill
FROM `users`
LEFT JOIN `users_skills`
ON users.user_id = ?
AND users_skills.user_id = users.user_id
$get_info->bind_param('s',$user_id);
$get_info->execute();
$row_user_details = $get_info->get_result()->fetch_Assoc(); // get result
<div class="col"><label class="input-filled"><input name="first_name" required value="<?php echo $row_user_details['first_name']; ?>">
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['last_name']; ?>">
While(" i can't use $row_user_details = $get_info->fetch_Assoc()"){
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['user_skill']; ?>">
}
我不确定要在 while () 中放什么,因为我需要在 while 循环之外使用查询的值,正如您从代码中看到的那样,我已经使用了 1-2 年小时,就是想不通
user_skill 是具有相同 user_id 的多个数据合二为一 table 其中名字和姓氏只是用户行中的一个值
数据库布局:
users_skills TABLE:
ID | user_id | user_skill |
1 | 1 | something1 |
2 | 1 | something2 |
3 | 1 | something3 |
4 | 2 | somethine4 |
5 | 6 | somethine5 |
users TABLE:
user_id | first_name | last_name | some more stuff |
1 | john | key | secrets |
会话 ID = user_id // 在本例中为 1
此代码已缩短,因此不会向 public 泄露信息,但它的工作原理相同
您的查询给出了这个:
http://sqlfiddle.com/#!9/418d0b/1
SELECT users.user_id, users.FirstName,
users.LastName,
users.Address,
users.City,
users_skills.user_id,
users_skills.skill
FROM `users`
LEFT JOIN `users_skills`
ON users.user_id = 1
AND users_skills.user_id = users.user_id
user_id FirstName LastName Address City user_id skill
1 Tom B Erichsen 4006 Stavanger Stavanger 1 Erichsen
1 Tom B Erichsen 4006 Stavanger Stavanger 1 Tom B
1 Tom B Erichsen 4006 Stavanger Stavanger 1 4006 Stavanger
2 Tom B John 4006 Stavanger Stavanger (null) (null)
3 Tom B Tes 4006 Stavanger Stavanger (null) (null)
4 Tom B Smith 4006 Stavanger Stavanger (null) (null)
5 Tom B Jane 4006 Stavanger Stavanger (null) (null)
你能告诉我你想达到什么目的吗?我假设您希望每个用户都获得他的技能?还是仅针对会话用户?
为所有用户获取所有技能
SELECT users.user_id, users.FirstName,
users.LastName,
users.Address,
users.City,
users_skills.user_id,
users_skills.skill
FROM `users`
LEFT JOIN `users_skills`
ON users_skills.user_id = users.user_id
获得用户 1 的所有技能
users.LastName,
users.Address,
users.City,
users_skills.user_id,
users_skills.skill
FROM `users`
LEFT JOIN `users_skills`
ON users_skills.user_id = users.user_id
WHERE users.user_id = 1
一个想法:
我会选择不同的方式 创建一个获取技能的函数
function getUserSkills($userId){
global $conn;
$query = "SELECT * ";
$query .= "FROM users_skills ";
$query .= "WHERE user_id=" . $userId . " ";
$skillset = mysqli_query($conn, $query);
$results = array();
while ($skill = mysqli_fetch_assoc($skillset)){
$results[] = $skill;
}
return $results;
}
然后需要用户技能的时候调用就可以了
$userid = sql_prep($_SESSION['userid']);
$skills = getUserSkills($userid);
foreach ($skill as $skills) {
echo $skill['skill_name']. '<br>';
}
getUser($user_id)可能相同
好的,
因此,如果您已经拥有
<div class="col"><label class="input-filled"><input name="first_name" required value="<?php echo $row_user_details['first_name']; ?>">
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['last_name']; ?>">
问题是这一行
While(" i can't use $row_user_details = $get_info->fetch_Assoc()"){
<div class="col"><label class="input-filled"><input name="last_name" required value="<?php echo $row_user_details['user_skill']; ?>">
}
您可以将其重写为
$user_skill = '';
while($row_user_details = $get_info->fetch_Assoc()) {
$user_skill .= ' '.$row_user_details['user_skill'];
}
<div class="col">
<label class="input-filled"><input name="last_name" required value="<?php echo $user_skill; ?>">
</div>
此外,您必须向 SQL 查询添加 WHERE 子句才能仅获取特定的 user_id.
这样您将在一栏中获得 $userskill。 我希望我明白你想做什么。