左加入 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。 我希望我明白你想做什么。