[英]Data cross matching with mysql two tables, value display in table using PHP mySql
我在使用 php 和 mysql 時遇到了一些問題,我什至不知道如何正確地問這個問題,這似乎很復雜。 不過,如果有人可以幫助我,我將非常感激。
我有兩個表(allunit.sql)
id - unit_name
12 - MIS
14 - MIT
15 - ENG
當有人從瀏覽器(unit_id)單擊注冊按鈕時,將存儲在注冊表中。 如果有人注冊到該單元,按鈕將顯示(已注冊),而不是它會顯示“注冊”注冊。sql
enroll_id - unit_id
1 - 12
2 - 14
我正在使用這個查詢
$unit = SELECT * FROM allunit;
$enroll = SELECT * FROM enrollment;
$row_enroll = mysqli_fetch_assoc($enroll);
while($row = mysqli_fetch_assoc($unit)) {
if($row['id']==$row_enroll['unit_id']){
$button = 'Already enrolled';
}else{
$button = 'Enroll';
}
?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['unit_name']; ?></td>
<td><?php echo $button; ?></td>
</tr>
<?php } ?>
如果我添加一個單元按鈕更改為該單元的“已經注冊”,但如果我添加多個,仍然只有一個按鈕更改。 其他保持相同的“注冊”。
我知道我的問題很混亂,希望你能理解。 急需幫助。 謝謝
我在您的代碼中看到了兩個問題:
mysqli_fetch_assoc()
在 MySQL 結果上調用,而不是查詢。 您需要先調用mysqli_query()
。 您可以在文檔中看到一個示例: https://www.php.net/manual/en/mysqli-result.fetch-assoc.php$row_enroll
,它是一個行的集合,所以你不能直接將它與列一起使用,即$row_enroll['unit_id']
不會給你任何東西。 最后,看起來像這樣的兩個獨立數據集之間的比較對您來說不會很好,至少在當前代碼中是這樣。 考慮使用JOIN
只返回一個數據集。
首先,您必須告訴數據庫運行您的查詢,將查詢放在文本字符串中是不夠的。 這是完成的,在這種情況下使用query()
方法。
其次,由於您想為每個單元處理一次注冊,因此至少將注冊卸載到一個數組中會很有用,這樣它就可以輕松重用
// assuming you have a connection and its in $con
$sql = 'SELECT * FROM allunit';
$units = $con->query($sql);
$sql = 'SELECT unit_id FROM enrollment';
$res2 = $con->query($sql);
// make an array of just the enrolment id's as that all you need
// so we can use in_array() later to do the test for are you already enrolled
$enrols = [];
while ($row = $res2->fetch_assoc()){
$enrols[] = $row['unit_id'];
}
while ($unit = $units->fetch_assoc() ) {
if ( in_array($unit['id'], $enrols) ) {
$button = 'Already enrolled';
}else{
$button = 'Enroll';
}
?>
<tr>
<td><?php echo $unit['id']; ?></td>
<td><?php echo $unit['unit_name']; ?></td>
<td><?php echo $button; ?></td>
</tr>
<?php
} // endwhile
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.