我在高处寻找一个解决方案,但是我只是束手无策。

我有一个称为“ cals”的表。它包含一个称为“ rep_code”的列。其中包含确定cal的某个值,即。 “ EFM”,“ LM”等。记录的“ cals”列表通过“ well_id”链接到阱,“ well_id”是另一个称为“ wells”的表的索引器。现在,孔表中的每个记录都由“ run_id”链接,“ run_id”是另一个称为“ runs”的表的索引器。

井表:

Indexer  |   run_id
1        |     5
2        |     3
3        |     5
4        |     2


校准表:

Indexer  |   well_id   | rep_code
1        |     3       |    LM
2        |     4       |    EFM
3        |     1       |    LM
4        |     3       |    EFM


现在,当我查看运行列表时,我想显示运行中在“ rep_code”下具有“ EFM”的报告总数,以及“ LM”代码等的总数。因此在运行列表中,运行方式为ID 5应该表示总共2个“ LM”报告和1个“ EFM”。运行编号2应该只有1“ EFM和0” LM“

基本上,我认为我需要做的是“将井加入加入运行列表中的run_id,其中well_id = $ well_id” ...我想,每当我读到这篇文章时,我都会有些困惑。我不熟悉“加入”,因此深表歉意。

我已经设法将这部分代码汇总起来,以计算对一口井有效的每次发生次数,但是似乎无法使我全神贯注地将其全部放入运行中的所有井的功能声明中。

$sql = "SELECT
COUNT(CASE WHEN rep_code='LM' THEN 1 END) AS LM_tot,
COUNT(CASE WHEN rep_code='EFM' THEN 1 END) AS EFM_tot,
COUNT(CASE WHEN rep_code='GM' THEN 1 END) AS GM_tot
FROM cals WHERE well_id = '$well_id'";

$query = @mysql_query($sql);
$result = @mysql_fetch_array($query);

$LM_tot = $result['LM_tot'];
$EFM_tot = $result['EFM_tot'];
$GM_tot = $result['GM_tot'];


我也开始加入了,但还没有开始工作。

sql = "SELECT
COUNT(CASE WHEN rep_code='LM' THEN 1 END) AS LM_tot,
COUNT(CASE WHEN rep_code='EFM' THEN 1 END) AS EFM_tot,
COUNT(CASE WHEN rep_code='GM' THEN 1 END) AS GM_tot
FROM cals, wells INNER JOIN wells ON cals.well_id = wells.indexer
WHERE run_id = '$run_id'";


我希望我已经解释得足够清楚了。

最佳答案

将您正在谈论的联接放开以使您的查询正常工作,您只需要稍作改动即可:

$sql = "SELECT
           SUM(CASE WHEN rep_code='LM' THEN 1 ELSE 0 END) AS LM_tot,
           SUM(CASE WHEN rep_code='EFM' THEN 1 ELSE 0 END) AS EFM_tot,
           SUM(CASE WHEN rep_code='GM' THEN 1 ELSE 0 END) AS GM_tot
          FROM cals
               INNER JOIN
               wells ON cals.well_id = wells.indexer
         WHERE cals.well_id = '$well_id'";


如果要添加更多内容,请使用表结构更新您的问题,并放置一些示例数据和所需结果,然后我将更新我的答案。

关于php - PHP MySQL多重计数联接添加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20360004/

10-11 20:41