簡體   English   中英

使用php和mysql從表連接中獲取數據

[英]Fetch data from table join using php and mysql

我的數據庫中有以下表格:

CREATE TABLE subjects (
  subject_id int(11) NOT NULL AUTO_INCREMENT,
  subject text,
  PRIMARY KEY (subject_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;

CREATE TABLE users (
  id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  username varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE users_subjects (
  users_subjects_id int(11) NOT NULL AUTO_INCREMENT,
  user_id_fk int(11),
  subject_id_fk int(11),
  FOREIGN KEY(user_id_fk) REFERENCES users(id),
  FOREIGN KEY(subject_id_fk) REFERENCES subjects(subject_id),
  PRIMARY KEY (users_subjects_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;

在表“ users_subjects”中,我將表“ subjects”和“ users”關聯起來。

所有的表數據都是從PHP引入的,當引入usersubjects ,將創建“ users_subjects ”表。

例如,如果我輸入一個ID為1的名為“ EXAMPLE”的用戶,以及ID為1和2的SAT和ICT主題,則“ users_subjects ”表將類似於以下內容:

在此處輸入圖片說明

問題是我試圖在PHP表中向用戶顯示他們的相應主題,但是我不知道如何在“ SUBJECT”列中顯示以逗號分隔的主題。 我想做類似下圖的操作。 有人能幫我嗎? 謝謝

在此處輸入圖片說明

這是我的代碼中的內容:

 <table class="users">
    <tr>
        <th colspan="2"><h2>USERS</h2></th>
    </tr>
    <tr>
        <th> NAME </th>
        <th> SUBJECTS </th>
    </tr>

<?php
$sql = "SELECT * FROM users WHERE rol='profesor'"; 
$result = $conn->query($sql); if ($result->num_rows==0){

    echo 'No users';
}else{
while($row = $result->fetch_assoc()) {


     $subjects = "";
        $sql2 = "SELECT user_id_fk, GROUP_CONCAT(subject_id_fk SEPARATOR ',') FROM users_subjects WHERE user_id_fk='$id' GROUP BY user_id_fk;";

        /*$sql2 = "SELECT user_id_fk, GROUP_CONCAT(subject_id_fk SEPARATOR ',') FROM users_subjects where user_id_fk='$id'";*/


        $result2 = $conn->query($sql2);
        while ($row2 = $result2->fetch_assoc()) {
            $subjects = $row2["subject"];
        }

        echo "<tr>
                  <td>".$row["username"]."</td>
                  <td>".$subjects."</td></tr>";
    }
}
?>
</table>

您需要的查詢必須涉及分組才能使用GROUP_CONCAT

SELECT user_id_fk, GROUP_CONCAT(subject_id_fk SEPARATOR ',')
  FROM users_subjects
  WHERE user_id_fk=?
  GROUP BY user_id_fk

如果要獲取名稱,則需要JOIN

SELECT users.username, GROUP_CONCAT(subjects.subject SEPARATOR ',')
  FROM users_subjects
  RIGHT JOIN users ON users.id=users_subjects.user_id_fk
  RIGHT JOIN subjects ON subjects.subject_id=users_subjects.subject_id_fk
  WHERE user_id_fk=?
  GROUP BY user_id_fk

暫無
暫無

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

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