【问题标题】:PHP MySQL multiple count join additionPHP MySQL 多重计数加入加法
【发布时间】:2013-12-03 19:32:41
【问题描述】:

我一直在寻找解决方案,但我就是不知道如何设置它。

我有一张名为“cals”的表。它包含一个名为“rep_code”的列。其中包含一个标识 cal 的特定值,即。 “EFM”、“LM”等。“cals”记录列表通过“well_id”链接到井,“well_id”是另一个名为“wells”的表上的索引器。现在,wells 表中的每条记录都由“run_id”链接,它是另一个名为“runs”的表上的索引器。

威尔斯表:

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

cals 表:

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”

基本上,我认为我需要做的是“将 wells 加入 cals 添加 run_id where well_id = $well_id from run list”...我想,每次我读到这个我都会有点困惑。我是“加入”的新手,所以我很抱歉。

我已经设法将这段代码放在一起,以计算对一口井有效的每一次出现,但似乎无法将其全部放入运行中的所有井的功能语句中。

$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'";

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

【问题讨论】:

  • 如果你把表结构放在一起会有所帮助,这样我们就可以看到你正在谈论的连接。
  • 感谢 Jorge,但是,我需要将 run_id 合并到 cals 表上的 well_id 列中(请参阅我的加入编辑)。我一直在尝试很多事情。看起来应该很简单...

标签: php mysql join count


【解决方案1】:

将您正在谈论的联接分开以使您的查询正常工作,您只需要进行一些更改:

$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'";

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

【讨论】:

    【解决方案2】:

    这是我最终使用的,效果很好。

    $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 
    INNER JOIN 
    wells ON cals.well_id = wells.indexer
    WHERE run_id = '$run_id'";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多