0

嗨,我正在创建一个工作申请管理系统。在后端,管理员需要能够看到所有已申请工作并等待回复的人。这是我的 sql 查询:

'SELECT * FROM jp_applications WHERE application_status = "Awaiting Response" ORDER BY job_id'

我的问题是,一旦我遍历并将其输出到申请人列表中,如果它是重复申请人,我希望能够向该列表元素添加一个类。(一个人申请一份以上的工作)。

理想情况下,我希望按 job_id 对列表进行排序,所以我不想通过 user_id 对其进行排序。

我希望这是有道理的。

<ul>
    <li class="duplicate">Joe Bloggs</li>
    <li>Michael Jackson</li>
    <li>Gandalf the Grey</li>
    <li>Mahatma Gandhi</li>
    <li class="duplicate">Joe Bloggs</li>
    <li>Daffy Duck</li>
    <li>Sponegbob Squarepants</li>
    <li>Will Smill</li>
</ul>
4

3 回答 3

3

替代方案 - 让数据库为您完成工作:

SELECT j.*, c.appl_count FROM jp_applications j
    INNER JOIN (SELECT user_id, count(1) as appl_count FROM jp_applications
            WHERE application_status = "Awaiting Response"
            GROUP BY user_id) c on c.user_id = j.user_id
WHERE j.application_status = "Awaiting Response"
ORDER BY j.job_id

然后,您的结果集将具有可用的字段“appl_count”,如果大于 1,则附加该类。这消除了在应用程序代码中进行任何以牙还牙记账的需要。

于 2013-10-15T16:09:53.973 回答
0

在每次循环迭代中,检查 user_id 键是否存在于您的“already_matched”数组中。如果没有,请附加您的课程。否则,什么都不做

半 php-ish 伪代码:

$already_matched = array(); 
foreach($results as $result) { 
    if(!array_key_exists($result['user_id'],$already_matched)) { 
         $already_matched[$result['user_id']] = true;
        // append the css class. This is the first match
     }
     else { 
        // This is the second and all subsequent matches
     } 
}
于 2013-10-15T16:03:28.563 回答
0

您可以使用 php 数组有效地检测重复项:

$applicants = array();
// $results = query results

foreach($results as $application) {
    $is_duplicate = !empty($applicants[$applicants['user_id']]);

    echo '<span class="' . ($is_duplicate ? 'duplicate' : '') . '">Application here</span>'=

    $applicants[$application['user_id']] = $application;
}

我省略了所有数据库处理代码,因为您似乎已经控制了它。关键是在一个由用户 id 索引的数组中创建一个条目,然后在每次迭代时检查它是否已经遍历该用户。

于 2013-10-15T16:04:41.273 回答