Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用sql查询显示特定类别下的所有数据?_Php_Mysql_Sql - Fatal编程技术网

Php 如何使用sql查询显示特定类别下的所有数据?

Php 如何使用sql查询显示特定类别下的所有数据?,php,mysql,sql,Php,Mysql,Sql,我有两个Mysql表,结构如下: 表工作 表格作业详细信息 job_cat_id---job_cat_name ========================= 1 cat name 1 2 cat name 2 3 cat name 3 现在我想显示jobs表中每个类别下的所有jobs。例如 我需要展示的内容: Job Category 1 1. job 1 from category 1 2. Job 2

我有两个Mysql表,结构如下:

工作 表格作业详细信息

job_cat_id---job_cat_name
=========================
1            cat name 1
2            cat name 2
3            cat name 3
现在我想显示
jobs
表中每个类别下的所有jobs。例如

我需要展示的内容:

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>";           
}   

首先,我们必须记住,
SELECT
查询的结果是一个新生成的表。它不是多维数组。如果是多维数组,则可以在每个新数组的开头打印作业类别,该数组可以将所有作业分组到一个类别中,但是由于这不是SQL
SELECT
查询获得的结果类型,因此可以在每行之后打印作业类别:

echo "<h4>$job_category</h4>";  
echo "<p>$job_title</p>";     
从这里,您知道每个类别中的作业至少应该相邻分组(从最低到最高,如1,1,1,2,2,3,3,3)。现在可以做的是有条件地打印
$job\u类别
,前提是之前没有打印过

更改此行:

echo "<h4>$job_category</h4>";
echo“$job\u category”;
进入这一行:

if ($previous_print != $job_category)
{
  echo "<h4>$job_category</h4>";  
  $previous_print = $job_category;
}
if($previous\u print!=$job\u category)
{
echo“$job_category”;
$previous_print=$job_category;
}

让我知道它现在是否工作。

另一种解决方案可能是,您只需使用group by job cat\U id运行一个查询,然后在循环内部使用where子句job cat\U id编写另一个查询以获得所需的结果。

您需要在此处执行两个查询。以下是exmaple代码,可能需要根据表列名进行一些调整:

<?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>";
    }
}

只需修改两行代码即可。请查看下面我的答案,让我知道它是否适用于您。我正在检查它。我可以只使用一个查询吗?不,您应该在这里使用两个查询,因为这是一对多关系否,我可以使用一个查询来获得它。检查@Webeng答案:)这可能对3份工作有意义,但这是错误的。你不应该这样做。想象一下,当你有成百上千的工作时,会发生什么。这会是个问题吗?@shibbirahmed-awesome:)。如果这个答案对你有用,请用绿色复选标记接受它,以便将来的用户知道。
echo "<h4>$job_category</h4>";
if ($previous_print != $job_category)
{
  echo "<h4>$job_category</h4>";  
  $previous_print = $job_category;
}
<?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>";
    }
}