从下拉框中查询Mysql筛选器

从下拉框中查询Mysql筛选器,mysql,Mysql,早上好,我在下面的mysql查询中显示了在2012年1月和2013年1月合并的年份变化之前的销售情况 为了尝试解决问题,我放置了一个下拉表单框(id=YearSelect),其值为2012和2013,是否可以使用所选值控制此查询?如果最终用户选择2012,那么该值将作为where子句的一种类型发送到列Year <form id="yearselect"> <select name="year"> <option value="">Select year &

早上好,我在下面的mysql查询中显示了在2012年1月和2013年1月合并的年份变化之前的销售情况

为了尝试解决问题,我放置了一个下拉表单框(id=YearSelect),其值为2012和2013,是否可以使用所选值控制此查询?如果最终用户选择2012,那么该值将作为where子句的一种类型发送到列Year

<form id="yearselect">
<select name="year">
  <option value="">Select year </option>
  <option value="2012">2012</option>
  <option value="2013">2013</option>
</select>
</form>

感谢您的建议。

如何更改此
位置

Where
  b.StatusSubmittedDate > '2012 - 01 - 01'
致:


这应该足够了…

考虑到PHP标记,我假设您正在PHP页面上显示结果。您可以使用以下代码来执行您想要的操作

<form id="yearselect" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<select name='selyear' onchange='document.getElementById("yearselect").submit()'>
  <option value=''> - Select year </option>
  <option value='2012'>2012</option>
  <option value='2013'>2013</option>
</select>
</form>

<?
$y = date("Y");
if (isset($_POST['selyear']))
{
  if (checkdate(1, 1, $_POST['selyear']) && $_POST['selyear']>=2012)
    $y = $_POST['selyear'];
}

$query = 'Select
  *,
  If(q.Adviser Is Null, 1, 0) As remove
From
  (Select
      a.ContactFullName As Adviser,  
      YEAR(b.CaseDate) As Year,
      Sum(If(Month(b.StatusSubmittedDate) = 1, b.CaseCommission, 0)) As Jan,
      Sum(If(Month(b.StatusSubmittedDate) = 2, b.CaseCommission, 0)) As Feb,
      Sum(If(Month(b.StatusSubmittedDate) = 3, b.CaseCommission, 0)) As Mar,
      Sum(If(Month(b.StatusSubmittedDate) = 4, b.CaseCommission, 0)) As Apr,
      Sum(If(Month(b.StatusSubmittedDate) = 5, b.CaseCommission, 0)) As May,
      Sum(If(Month(b.StatusSubmittedDate) = 6, b.CaseCommission, 0)) As Jun,
      Sum(If(Month(b.StatusSubmittedDate) = 7, b.CaseCommission, 0)) As Jul,
      Sum(If(Month(b.StatusSubmittedDate) = 8, b.CaseCommission, 0)) As Aug,
      Sum(If(Month(b.StatusSubmittedDate) = 9, b.CaseCommission, 0)) As Sep,
      Sum(If(Month(b.StatusSubmittedDate) = 10, b.CaseCommission, 0)) As Oct,
      Sum(If(Month(b.StatusSubmittedDate) = 11, b.CaseCommission, 0)) As Nov,
      Sum(If(Month(b.StatusSubmittedDate) = 12, b.CaseCommission, 0)) As Decb,
      Sum(b.CaseCommission) As Total
    From
      tblcontacts a Inner Join
      tblcases b On a.ContactID = b.ContactAssignedTo
    Where
      b.StatusSubmittedDate > \''.$y.' - 01 - 01\'
      AND b.StatusSubmittedDate < \''.$y.' - 12 - 31\'
    Group By
      a.ContactFullName WITH ROLLUP
    Having
      Sum(b.CaseCommission) > 0.01) q
Order By
  If(q.Adviser Is Null, 1, 0), q.Total Desc'


  //output results
?>

那不是PHP。为什么这个问题被标记为PHP?谢谢你的建议,不过我可能实现错了。更新后的代码现在位于原始帖子中,但返回“注意:未定义变量:C:\wamp\sales.php中的SelectYear,第41行”。猜测它不是where语句中需要的表单字段的id?@gary Nope,它不是表单的id,您必须从组合框中提供正确的值,无论是从
$\u POST
还是
$\u GET
数组。让我们假设组合框字段的名称是
year
(因此有
),并且您正在发布表单,然后
其中的
将是:
其中year(b.StatusSubmittedDate)=“(int)$\u POST['year']”。
也尝试了该代码并反映在我的原始帖子中,但我也收到了“通知:未定义的索引:year”。无法解决此问题,在我的查询中,“YEAR(b.StatusSubmittedDate)”的输出总是2012或2013年,这是正确的,因此我猜测它是无法定位的select值?@gary发布select存在的表单代码,以及接收提交值的PHP代码…Hi@shadyyx,感谢再次管理解决此问题,当页面第一次加载时,过滤器没有值,因此它会出错。当我选择年份时,它会正确过滤查询,直到下一页加载。不知何故,我们需要找到如何使2013年成为页面加载的默认年份。感谢您的输入,Hugo非常感谢。此代码还返回一个未定义的变量:Year,页面错误为“\''..'-01-01\”和b.StatusSubmittedDate<\'''-12-31\”。我的错误是,我在发布期间中途从
$Year
切换到
$y
,忘记了更新一些。我更新了它。现在应该工作了。没问题,雨果,我也没看见!已经进行了更改,但仍然看到一个错误,例如“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以了解在'\'.2013.'-01-01\'和年份(b.StatusSubmittedDate)<\'.2013.'-12-'附近使用的正确语法,第1行”然后您没有使用$query来运行代码,而是复制了查询并将其放在双引号之间,而不是我使用的单引号之间。您可以将其更改为单引号,也可以将行更改为
b.StatusSubmittedDate>“$y-01-01”和b.StatusSubmittedDate<'$y-12-31'
谢谢Hugo,在看到您的帖子之前,我已经实现了另一个解决方案,现在可以使用了,我可以说谢谢您在这方面的帮助。
Where
  YEAR(b.StatusSubmittedDate) = ".(int)$YEAR_VALUE_FROM_DROPDOWN."
<form id="yearselect" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<select name='selyear' onchange='document.getElementById("yearselect").submit()'>
  <option value=''> - Select year </option>
  <option value='2012'>2012</option>
  <option value='2013'>2013</option>
</select>
</form>

<?
$y = date("Y");
if (isset($_POST['selyear']))
{
  if (checkdate(1, 1, $_POST['selyear']) && $_POST['selyear']>=2012)
    $y = $_POST['selyear'];
}

$query = 'Select
  *,
  If(q.Adviser Is Null, 1, 0) As remove
From
  (Select
      a.ContactFullName As Adviser,  
      YEAR(b.CaseDate) As Year,
      Sum(If(Month(b.StatusSubmittedDate) = 1, b.CaseCommission, 0)) As Jan,
      Sum(If(Month(b.StatusSubmittedDate) = 2, b.CaseCommission, 0)) As Feb,
      Sum(If(Month(b.StatusSubmittedDate) = 3, b.CaseCommission, 0)) As Mar,
      Sum(If(Month(b.StatusSubmittedDate) = 4, b.CaseCommission, 0)) As Apr,
      Sum(If(Month(b.StatusSubmittedDate) = 5, b.CaseCommission, 0)) As May,
      Sum(If(Month(b.StatusSubmittedDate) = 6, b.CaseCommission, 0)) As Jun,
      Sum(If(Month(b.StatusSubmittedDate) = 7, b.CaseCommission, 0)) As Jul,
      Sum(If(Month(b.StatusSubmittedDate) = 8, b.CaseCommission, 0)) As Aug,
      Sum(If(Month(b.StatusSubmittedDate) = 9, b.CaseCommission, 0)) As Sep,
      Sum(If(Month(b.StatusSubmittedDate) = 10, b.CaseCommission, 0)) As Oct,
      Sum(If(Month(b.StatusSubmittedDate) = 11, b.CaseCommission, 0)) As Nov,
      Sum(If(Month(b.StatusSubmittedDate) = 12, b.CaseCommission, 0)) As Decb,
      Sum(b.CaseCommission) As Total
    From
      tblcontacts a Inner Join
      tblcases b On a.ContactID = b.ContactAssignedTo
    Where
      b.StatusSubmittedDate > \''.$y.' - 01 - 01\'
      AND b.StatusSubmittedDate < \''.$y.' - 12 - 31\'
    Group By
      a.ContactFullName WITH ROLLUP
    Having
      Sum(b.CaseCommission) > 0.01) q
Order By
  If(q.Adviser Is Null, 1, 0), q.Total Desc'


  //output results
?>