[英]mysql join query for select rows from two tables that one table is having multiple rows matching to the first table
[英]Join two tables and only output rows that exist in the first table
我正在設計一種允許用戶申請多個獎勵類別的表格。 它們可以適用於所有多個類別,但只能適用於每個類別一次。
獎勵類別存儲在此表中:
當用戶申請類別時,將使用用戶的nominee_id和award_category_id在下表中輸入一行:
然后,我就是這段代碼,向用戶顯示他們已經應用了哪些獎勵,效果很好。
$result = mysql_query("
SELECT
award_subsection.*,
award_subsection.title AS subsection_title,
award_nomination_category.*
FROM
award_subsection INNER JOIN
award_nomination_category
ON
award_subsection.id=award_nomination_category.award_category_id
WHERE
award_subsection.active='1' AND
award_subsection.award_id='$id' AND
award_subsection.additional_function='award category' AND
award_nomination_category.active='1' AND
award_nomination_category.award_id='$id' AND
award_nomination_category.nominee_id='$nominee_id'
");
$category_count = mysql_num_rows($result);
if($category_count > 0) {
echo'
<div id="column_full" class="reverse_margin">
<div id="subsection_heading">
<h3>You have already selected the following award categories:</h3>
</div><!--
--><div id="subsection_content">
<!--
';
while ($row = mysql_fetch_array($result)) {
echo '
--><div id="column_third">
<h3>' . $row['subsection_title'] . '</h3>
</div><!--
';
}
echo'
-->
</div>
</div>
';
}
但是我的問題是,當我還想渲染一個下拉菜單時,該菜單僅顯示用戶尚未應用的類別。 以下代碼適用於以前僅申請了1個類別的用戶,但是當用戶申請的類別大於1時,下拉菜單將顯示所有類別。 我懷疑這是因為同一位用戶有兩行應用程序,該腳本在表中運行了兩次並獲取了所有類別。
$result = mysql_query("
SELECT
award_subsection.*,
award_subsection.id AS subsection_id,
award_subsection.title AS subsection_title,
award_nomination_category.*
FROM
award_subsection JOIN
award_nomination_category
ON
award_subsection.id!=award_nomination_category.award_category_id
WHERE
award_subsection.active='1' AND
award_subsection.award_id='$id' AND
award_subsection.additional_function='award category' AND
award_nomination_category.active='1' AND
award_nomination_category.award_id='$id' AND
award_nomination_category.nominee_id='$nominee_id'
GROUP BY
award_subsection.id
");
while($row = mysql_fetch_array($result)) {
echo '
<option value="' . $row['subsection_id'] . '">' . $row['subsection_title'] . '</option>
';
}
php是否有辦法知道在第一個查詢中選擇了哪些類別並在第二個查詢中將其刪除? 提前謝謝!
我想到了!!
如果有人感興趣,這是代碼:
// Check for applied categories
$result = mysql_query("
SELECT
award_subsection.*,
award_subsection.id AS subsection_id,
award_subsection.title AS subsection_title,
award_nomination_category.*
FROM
award_subsection INNER JOIN
award_nomination_category
ON
award_subsection.id=award_nomination_category.award_category_id
WHERE
award_subsection.active='1' AND
award_subsection.award_id='$id' AND
award_subsection.additional_function='award category' AND
award_nomination_category.active='1' AND
award_nomination_category.award_id='$id' AND
award_nomination_category.nominee_id='$nominee_id'
");
$category_count = mysql_num_rows($result);
if($category_count > 0) {
echo'
<div id="column_full" class="reverse_margin">
<div id="subsection_heading">
<h3>You have already selected the following award categories:</h3>
</div><!--
--><div id="subsection_content">
<!--
';
// Create array of IDs that the nominee has already applied for
$selected_categories = array();
while ($row = mysql_fetch_array($result)) {
$selected_categories[] = $row['subsection_id'];
echo '
--><div id="column_third">
<h3>' . $row['subsection_title'] . '</h3>
</div><!--
';
}
echo'
-->
</div>
</div>
';
}
echo'
<form method="post" action="award-nomination-submit.php" data-parsley-validate>
<div id="column_full" class="reverse_margin">
<input type="hidden" name="award_id" value="' . $id . '">
<input type="hidden" name="nominee_id" value="' . $nominee_id . '">
<input type="hidden" name="step" value="' . $step . '">
<h3>Select an Award Category:</h3>
<select class="visual_form" name="award_category" required>
<option value="" selected>Please Select</option>
';
// Build award categories drop down
$result = mysql_query("
SELECT
*
FROM
award_subsection
WHERE
active='1' AND
award_id='$id' AND
additional_function='award category'
");
while($row = mysql_fetch_array($result)) {
// If ID exists in array, don't echo out in drop down
if(in_array($row['id'], $selected_categories)) {
echo'';
}
else {
echo '
<option value="' . $row['id'] . '">' . $row['title'] . '</option>
';
}
}
echo '
</select>
</div>
';
基本上,我從第一個sql查詢輸出的ID中創建了一個數組。 然后在第二個sql查詢中,我將ID與數組中的ID進行了比較,只回顯了不匹配的ID :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.