【问题标题】:How to make this query simple and short. (my_sql) and PHP如何使这个查询简单而简短。 (mysql) 和 PHP
【发布时间】:2018-04-05 06:39:38
【问题描述】:

我提供了两个 php,其中包含两种类型的查询,有人可以帮我使这个查询比这更短。提前致谢

<?php $sel = mysql_query("SELECT COUNT( form ) AS ML FROM webcm WHERE department ='PDN-ML' AND DATE = CURDATE()");
$get_sel = mysql_fetch_array($sel); 
$PDNML1 = $get_sel['ML'];

$sel1 = mysql_query("SELECT COUNT( form ) AS HM FROM webcm WHERE department ='PDN-HM' AND DATE = CURDATE()");
$get_sel1 = mysql_fetch_array($sel1); 
$PDNHM1 = $get_sel1['HM'];

$sel2 = mysql_query("SELECT COUNT( form ) AS AI FROM webcm WHERE department ='AI' AND DATE = CURDATE()");
$get_sel2 = mysql_fetch_array($sel2); 
$AI1 = $get_sel2['AI'];

$sel3 = mysql_query("SELECT COUNT( form ) AS SMT FROM webcm WHERE department ='SMT' AND DATE = CURDATE()");
$get_sel3 = mysql_fetch_array($sel3); 
$SMT1 = $get_sel3['SMT'];?>

【问题讨论】:

  • 请停止使用 PHP 已弃用的 mysql_ API

标签: php mysql sql variables phpmyadmin


【解决方案1】:
SELECT SUM(`ML`) AS `ML`,
       SUM(`HM`) AS `HM`,
       SUM(`AI`) AS `AI`,
       SUM(`SMT`) AS `SMT`
FROM (
SELECT SUM( CASE WHEN department='PDN-ML' THEN 1 ELSE 0 END) AS `ML`,
       SUM( CASE WHEN department='PDN-HM' THEN 1 ELSE 0 END) AS `HM`,
       SUM( CASE WHEN department='AI' THEN 1 ELSE 0 END) AS `AI`,
       SUM( CASE WHEN department='SMT' THEN 1 ELSE 0 END) AS `SMT`
FROM webcm 
WHERE DEPARTMENT IN ('PDN-ML','PDN-HM', 'AI', 'SMT') 
AND DATE = CURDATE()
) AS T

演示

http://sqlfiddle.com/#!9/9e8fcf/1

【讨论】:

  • 但是如何获取每个计数的值.. 就像我上面的代码一样,我调用 ($AI1 = $get_sel2['AI']) 来获取 AI 的计数值..
  • 您可以添加 where 条件并检查 where WHERE department ='SMT'
  • 那么这个和上一个查询有什么区别
  • 现在检查我编辑了我的答案@NazirahAnwar
【解决方案2】:

试试这个

<?php $sel = mysql_query("SELECT count(*) as ML,department from webcm where DATE = CURDATE() GROUP BY department  ");
$get_sel = mysql_fetch_array($sel); 
$PDNML1 = $get_sel['ML'];

<?php $sel = mysql_query("SELECT count(*) as ML,department from webcm where DATE = CURDATE() and DEPARTMENT IN ('PDN-ML','PDN-HM', 'AI', 'SMT') GROUP BY department  ");
$get_sel = mysql_fetch_array($sel); 
$PDNML1 = $get_sel['ML'];

【讨论】:

    【解决方案3】:
    SELECT department,
       case when department='PDN-ML' then COUNT( form ) else 0 end AS ML , 
       case when department='PDN-HM' then COUNT( form ) else 0 end AS HM,
       case when department='AI' then COUNT( form ) else 0 end AS AI,
       case when department='SMT' then COUNT( form ) else 0 end AS SMT,
    FROM webcm 
    WHERE DEPARTMENT IN ('PDN-ML','PDN-HM', 'AI', 'SMT') 
    AND DATE = CURDATE()
    GROUP BY department
    

    【讨论】:

      【解决方案4】:

      也许你可以做的是:

      SELECT COUNT( form ) AS ML, department  
      FROM webcm WHERE DATE = CURDATE() 
      AND DEPARTMENT IN ('PDN-ML','PDN-HM', 'AI', 'SMT') 
      group by department
      

      你可以访问所有,$get_sel2['ML'] 会给你计数,$get_sel2['department'] 会给你部门名称或代码。

      然后你会得到一个带有计数和对应部门的查询结果。

      【讨论】:

      • 那么如何得到这个值($AI1 = $get_sel2['AI'])
      • 你可以访问所有的,也许是 $get_sel2[indec]['ML']
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多