job_id---job_cat_id---job_title---job_description---job_data----is_active
=========================================================================
1 1 title 1 description 1 2016-05-06 1
2 2 title 2 description 2 2016-05-06 0
3 2 title 3 description 3 2016-05-06 1
表job_details
job_cat_id---job_cat_name
=========================
1 cat name 1
2 cat name 2
3 cat name 3
现在我想显示jobs
表中每个类别下的所有作业。 E.g
我需要展示的内容:
Job Category 1
1. job 1 from category 1
2. Job 2 from category 1
Job Category 2
1. Job 3 from category 2
为了做到这一点,我使用了以下sql
查询,但无法获得正确的结果:
$get_job = mysqli_query($conn, "SELECT jobs.job_id, jobs.job_title, job_category.job_cat_name FROM jobs LEFT JOIN job_category ON job_category.job_cat_id = jobs.job_cat_id WHERE jobs.is_active = '1' ");
while($result = mysqli_fetch_array($get_job) ) {
$job_id = (int) $result['job_id'];
$job_title = htmlspecialchars($result['job_title']);
$job_category = htmlspecialchars($result['job_cat_name']);
echo "<h4>$job_category</h4>";
echo "<p>$job_title</p>";
}
现在,它向我显示了所有工作的所有类别,但我想显示每个类别下的所有工作。
现在展示的内容:
Job Category 1
1. job 1 from category 1
Job Category 1
1. Job 2 from category 1
Job Category 2
1. Job 3 from category 2
答案 0 :(得分:2)
首先,我们必须记住SELECT
查询的结果是新生成的表。它不是一个多维数组。如果它是一个多维数组,那么您可以在每个新数组的开头打印作业类别,这可能会将所有作业分组到一个类别中,但是因为这不是SQL获得的结果类型SELECT
QUERY,您在每行后打印作业类别:
echo "<h4>$job_category</h4>";
echo "<p>$job_title</p>";
<强>解决方案:强>
问题的解决方案是首先在SQL查询中使用ORBER BY ASC
:
$get_job = mysqli_query($conn, "SELECT jobs.job_id, jobs.job_title, job_category.job_cat_name FROM jobs LEFT JOIN job_category ON job_category.job_cat_id = jobs.job_cat_id WHERE jobs.is_active = '1' ORDER BY job_cat_id ASC");
从那里,你知道每个类别的工作至少应该彼此相邻(从最低到最高,如1,1,1,1,2,2,3,3,3)。您现在可以做的是条件打印$job_category
如果它只是在以前没有打印过。
更改此行:
echo "<h4>$job_category</h4>";
进入这一行:
if ($previous_print != $job_category)
{
echo "<h4>$job_category</h4>";
$previous_print = $job_category;
}
让我知道它现在是否有效。
答案 1 :(得分:0)
另一种解决方案可能是,如果您只使用group by job_cat_id运行一个查询,然后在内部循环中编写另一个查询,以使用where子句job_cat_id获得所需的结果。
答案 2 :(得分:0)
您需要在此处执行2次查询。这是一个例子代码,可能需要根据您的表列名称进行一些调整:
<?php
$query = "SELECT `job_cat_id`, `job_cat_name`, COUNT(`jobs`.`id`) as `jobs`
FROM `job_category`
GROUP BY `job_cat_id`";
$get_cat = mysqli_query($conn, $query);
$cats = [];
while($result = mysqli_fetch_array($get_cat) ) {
$result['jobs'] = [];
$cats[$result['job_cat_id']] = $result;
}
$get_job = mysqli_query($conn, "SELECT jobs.job_id, jobs.job_title, jobs.job_cat_id FROM jobs WHERE jobs.is_active = '1' AND `job_cat_id` IN (" . implode(',', array_keys($cats)) . ")");
while($result = mysqli_fetch_array($get_job) ) {
$cats[$result['job_cat_id']][] = $result;
}
foreach ($cats as $cat) {
$job_category = htmlspecialchars($cat['job_cat_name']);
echo "<h4>$job_category</h4>";
foreach ($cat['jobs'] as $job) {
$job_title = htmlspecialchars($job['job_title']);
echo "<p>$job_title</p>";
}
}