(Php)使用多个选项创建搜索查询,但使用MONTHNAME和YEAR
我有一个表单,有3个下拉列表,其中有不同的标准,一个是搜索月份(mes)、年份(ano)和类型(tipo_id) 我想做的是,多亏了这里的许多问题,我才能够来到这里,当你从3个下拉列表中选择一些东西,2或1,它会显示一个表格,其中引用了关于它的信息,我可以做,但就tipo_id而言,我想问题在于我在代码中使用的MONTHNAME和YEAR,我想知道如何才能使这项工作,提前谢谢(Php)使用多个选项创建搜索查询,但使用MONTHNAME和YEAR,php,mysql,database,search,Php,Mysql,Database,Search,我有一个表单,有3个下拉列表,其中有不同的标准,一个是搜索月份(mes)、年份(ano)和类型(tipo_id) 我想做的是,多亏了这里的许多问题,我才能够来到这里,当你从3个下拉列表中选择一些东西,2或1,它会显示一个表格,其中引用了关于它的信息,我可以做,但就tipo_id而言,我想问题在于我在代码中使用的MONTHNAME和YEAR,我想知道如何才能使这项工作,提前谢谢 // Connect to server and select database. mysql_connect("$h
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$mes = mysql_real_escape_string($_POST['mes']);
$ano = mysql_real_escape_string($_POST['ano']);
$tipo = mysql_real_escape_string($_POST['tipo_id']);
$meses = array(
Janeiro => 'January',
Fevereiro =>'February',
Março =>'March',
Abril =>'April',
Maio =>'May',
Junho =>'June',
Julho => 'July',
Agosto =>'August',
Setembro =>'September',
Outubro =>'October',
Novembro =>'November',
Dezembro =>'December'
);
$sql4 = "SELECT * FROM fluxo ";
$searches = array();
if ($mes != '') $searches[] = " OR MONTHNAME(data) = '".$meses[$mes]."'";
if ($ano != '') $searches[] = " OR YEAR(data) = '".$ano."'";
if ($tipo != '') $searches[] = " OR tipo = '".$tipo."'";
if (count($searches) > 0) {
$sql4 .= " WHERE 1 " . implode(" AND ", $searches);
echo "sql4=$sql4\n";
//$sql4 = "SELECT tipo, movimento, valor, data FROM fluxo WHERE tipo = '".$tipo."' AND MONTHNAME(data) = '".$meses[$mes]."' AND YEAR(data) = '".$ano."' ";
//$result4=mysql_query($sql4);
$result5 = mysql_query('SELECT SUM(valor) AS value_sum FROM fluxo GROUP BY tipo having count(tipo)>1');
$row5 = mysql_fetch_assoc($result5);
$sum5 = $row5['value_sum'];
$n=1;
echo "<p>Os seus resultados:<p>";
echo "<table border=0>";
echo "<tr bgcolor='#CCFFCC'>";
echo "<td style='width: 100px;'>Tipo</td>";
echo "<td style='width: 100px;'>Movimento</td>";
echo "<td style='width: 100px;'>Valor</td>";
echo "<td style='width: 100px;'>Data</td>";
echo "</tr>";
while($row = mysql_fetch_array($result4)){
echo "<tr bgcolor='#CCCCCC'>";
echo "<td style='width: 100px;'>".$row['tipo']."</td>";
echo "<td style='width: 100px;'>".$row['movimento']."</td>";
echo "<td style='width: 100px;'>".$row['valor']."</td>";
echo "<td style='width: 100px;'>".$row['data']."</td>";
echo "</tr>";
}
echo "</table>";
//连接到服务器并选择数据库。
mysql_connect(“$host”、“$username”、“$password”)或die(“无法连接”);
mysql_select_db($db_name)或die(“无法选择db”);
$mes=mysql\u real\u escape\u字符串($\u POST['mes']);
$ano=mysql\u real\u escape\u字符串($\u POST['ano']);
$tipo=mysql\u real\u escape\u字符串($\u POST['tipo\u id']);
$meses=数组(
里约热内卢=>“一月”,
Fevereiro=>二月,
Março=>三月,
Abril=>“四月”,
Maio=>“五月”,
Junho=>“June”,
Julho=>“July”,
Agosto=>“八月”,
Setembro=>“九月”,
Outubro=>“十月”,
Novenbro=>11月,
Dezembro=>“十二月”
);
$sql4=“从fluxo中选择*”;
$searches=array();
如果($mes!='')$searches[]=”或MONTHNAME(data)='“$meses[$mes]。”;
如果($ano!='')$searches[]=”或年份(数据)='“$ano.”;
如果($tipo!='')$searches[]=”或tipo='“$tipo.”;
如果(计数($searches)>0){
$sql4.=“其中1”。内爆(“AND”,$searches);
echo“sql4=$sql4\n”;
//$sql4=“从fluxo中选择tipo、movimento、valor、数据,其中tipo='”、“$tipo.”和MONTHNAME(数据)='”、“$meses[$mes]”和年份(数据)='”、“$ano.”;
//$result4=mysql\u查询($sql4);
$result5=mysql_查询('SELECT SUM(valor)作为tipo拥有count(tipo)>1的fluxo组的值_SUM');
$row5=mysql\u fetch\u assoc($result5);
$sum5=$row5['value_sum'];
$n=1;
echo“Os seus resultados:”;
回声“;
回声“;
呼应"提婆",;
呼应“Movimento”;
呼应“英勇”;
回声“数据”;
回声“;
而($row=mysql\u fetch\u数组($result4)){
回声“;
回显“$row['tipo']”;
回显“$row['movimento']”;
回显“$row['valor']”;
回显“$row['data']”;
回声“;
}
回声“;
这应该可以:
$sql4 = "SELECT * FROM fluxo ";
$searches = array();
if ($mes != '') $searches[] = " MONTHNAME(data) = '".$meses[$mes]."'";
if ($ano != '') $searches[] = " YEAR(data) = '".$ano."'";
if ($tipo != '') $searches[] = " tipo = '".$tipo."'";
if (count($searches) > 0) {
$sql4 .= " WHERE 1 " . implode(" AND ", $searches);
}
在内爆
$searches
后,您将得到一个最多包含3个WHERE
关键字的查询。删除前两个WHERE
s应该可以做到这一点。它不起作用,它只显示了我从“tipo\u id”中选择的所有内容…也许我失踪了something@Fabiotp91您确定处理的是正确的MySQL结果吗?Omesh的代码将生成一个类似于SELECT…WHERE 1或…AND或…AND或…AND或…
的查询,该查询无法返回任何内容,因为语法不正确。另一种可能是$\u POST['mes']和$\u POST['ano']没有设置或为空。我试过了,但仍然不起作用,我的代码肯定有其他问题最初我没有这些代码,但即使这样,它也只带来了“tipo__id”的结果,而不尊重“ano”和“mes”的结果