Php 如果本年度数据不可用,则显示上一年度

Php 如果本年度数据不可用,则显示上一年度,php,mysql,Php,Mysql,我创建了一个查询来显示本年度的数据,而本年度数据不存在的行显示上一年度的数据,但现在的问题是,拥有本年度数据的公司也显示上一年度的数据 数据库公司年度数据 +--id--+---company_id----+----year-----+----number_of_shares_issued----+ + 1 + 20 + 2011 + 425 + + 2 + 21

我创建了一个查询来显示本年度的数据,而本年度数据不存在的行显示上一年度的数据,但现在的问题是,拥有本年度数据的公司也显示上一年度的数据

数据库公司年度数据

 +--id--+---company_id----+----year-----+----number_of_shares_issued----+
+   1  +     20          +    2011     +              425              +
+   2  +     21          +    2011     +              425              +
+   3  +     22          +    2011     +              425              +
+   4  +     23          +    2011     +              425              +
+   5  +     21          +    2012     +              425              +
+   6  +     20          +    2012     +              425              +
+   7  +     23          +    2012     +              425              +
+   8  +     20          +    2013     +              425              +
公司

+--id--+---company_name----+----category-----+
+  20  +     Company 1     +       2         +
+  21  +     Company 2     +       2         +
+  22  +     Company 3     +       2         +
+  23  +     Company 4     +       5         + 
这是我的问题

$sql            = mysqli_query($connect, "SELECT * FROM companies WHERE category = '36'");
    $total_count    = mysqli_num_rows($sql);
    $companies = array();


    while($row = mysqli_fetch_assoc($sql)) {
            $companies[] = $row['id'];
    }

    $ids = join(', ', $companies);

    $sql1         = mysqli_query($connect, "SELECT year FROM companies_annual_data WHERE company_id IN ($ids) ORDER BY year DESC LIMIT 0, $total_count");
    $total_count1 = mysqli_num_rows($sql1);
    $year     = array();

    $prev_val = null;       
    while($total_year = mysqli_fetch_assoc($sql1)) {
        if($total_year['year'] != $prev_val) {
            $year[] =  $total_year['year'];
        }
        $prev_val = $total_year['year'];    
    }

    $years      = join(', ', $year);
    $sql2       = mysqli_query($connect, "SELECT DISTINCT number_of_shares_issued, year, company_id FROM companies_annual_data WHERE company_id IN ($ids) AND year IN ($years)");
    $prev_val_y = null;
    while($share_num = mysqli_fetch_assoc($sql2)) {
        if($share_num['year'] != date('Y')) {
            echo "Number Of Shares : " . $share_num['number_of_shares_issued'];
            echo " Year : " . $share_num['year'];
            echo " Company Id : " . $share_num['company_id'];
            echo "<br />";
        }
    }
这是错误的,输出应该是这样的

Number Of Shares : 284125000 Year : 2015 Company Id : 348
Number Of Shares : 100000000 Year : 2015 Company Id : 351
Number Of Shares : 152098334 Year : 2016 Company Id : 356
Number Of Shares : 283500000 Year : 2016 Company Id : 366

如果我理解这个问题,谁能帮我解决这个问题

这将返回所提供的每家公司最近一年的记录数据 类别是36

SELECT CAD.num_of_Shares_Issued, CAD.`Year`, CAD.Company_ID
FROM Companies C
INNER JOIN (SELECT max(`year`) MYear, Company_ID 
            FROM company_Annual_data 
            GROUP BY Company_ID) SUB
 on SUB.CompanyID = C.Company_ID
LEFT JOIN Company_Annual_data CAD
 on C.ID = CAD.Company_ID
and SUB.MYear = CAD.`year`
WHERE  C.Category = 36

在我看来,如果你按股数和公司ID最大化年度和组数,你就会得到你想要的结果。我不明白为什么你有3个查询,而1使用连接就足够了。是因为你想按公司行业汇总数据,比如获取1个行业内的公司数据,我不知道如何进行查询,所以为了简单起见,我提出了这个查询:@xQbert你能帮我吗?查看关于连接你得到了正确的答案,但我有一个错误mysqli_fetch_assoc希望参数1是mysqli_result,布尔值是什么,因为使用了caps等?我在PHP方面很弱;SQL语言能力强。我们能否先确保SQL在DB查询窗口中获得正确的结果,然后跳转到PHP中?其他人可能需要帮助PHPgreat它对我有用知道,谢谢你非常感谢你能解释一下你到底做了什么吗
SELECT CAD.num_of_Shares_Issued, CAD.`Year`, CAD.Company_ID
FROM Companies C
INNER JOIN (SELECT max(`year`) MYear, Company_ID 
            FROM company_Annual_data 
            GROUP BY Company_ID) SUB
 on SUB.CompanyID = C.Company_ID
LEFT JOIN Company_Annual_data CAD
 on C.ID = CAD.Company_ID
and SUB.MYear = CAD.`year`
WHERE  C.Category = 36