簡體   English   中英

使用 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 的多個數據,其中名字和姓氏只是用戶行中的一個值

數據庫布局:

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         |

session ID 為 = user_id // 在本例中為 1

此代碼已縮短,因此不會向公眾透露信息,但它的工作原理相同

您的查詢給出了這個:

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)

你能告訴我你想達到什么目標嗎? 我假設您希望每個用戶都獲得他的技能? 還是僅適用於 Session 用戶?

為所有用戶獲得所有技能

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 

只是一個想法:

我會 go 不同創建一個 function 獲得技能

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM