簡體   English   中英

連接兩個表,僅輸出第一個表中存在的行

[英]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.

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