Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据下拉选择调整查询_Php_Mysql_Drop Down Menu - Fatal编程技术网

Php 根据下拉选择调整查询

Php 根据下拉选择调整查询,php,mysql,drop-down-menu,Php,Mysql,Drop Down Menu,我想得到的是: 我的php文件中有以下变量: $tech= $_GET['Combobox10']; $shopfloor = $_GET['Combobox8']; 我想做的是,如果从HTML表单中,例如变量$tech(它是一个下拉列表)被选择为“all”,那么下面的查询必须运行,以显示表中的所有tech,就像sql查询中与tech相关的Having部分不存在一样。$shopfool也是如此-如果选择的下拉列表是'all',我希望查询忽略$shopfool的having部分并显示all。当然

我想得到的是:

我的php文件中有以下变量:

$tech= $_GET['Combobox10'];
$shopfloor = $_GET['Combobox8'];
我想做的是,如果从HTML表单中,例如变量$tech(它是一个下拉列表)被选择为“all”,那么下面的查询必须运行,以显示表中的所有tech,就像sql查询中与tech相关的Having部分不存在一样。$shopfool也是如此-如果选择的下拉列表是'all',我希望查询忽略$shopfool的having部分并显示all。当然,如果选择了特定的车间或技术,则必须强制执行查询的Having部分

$result = mysql_query ("SELECT * FROM dbo_shopfloorcells INNER JOIN (dbo_noted_by INNER JOIN (dbo_leader_name INNER JOIN (dbo_Station INNER JOIN (dbo_Shop_Floor INNER JOIN (dbo_Fault_Desc INNER JOIN 
(dbo_Machine INNER JOIN (dbo_Line_Cell_Binding INNER JOIN (dbo_Tech_Name INNER JOIN (dbo_Maint_Category INNER JOIN dbo_newprevlog2 ON dbo_Maint_Category.ID = dbo_newprevlog2.ID_Maint_Cat) 
ON dbo_Tech_Name.ID = dbo_newprevlog2.ID_Tech_Name) ON dbo_Line_Cell_Binding.PKID = dbo_newprevlog2.ID_Line_Desc) ON dbo_Machine.PKID = dbo_newprevlog2.ID_Mach_Desc) 
ON dbo_Fault_Desc.ID = dbo_newprevlog2.ID_Fault_Desc) ON dbo_Shop_Floor.ID = dbo_newprevlog2.ID_Shop_Floor) ON dbo_Station.PKID = dbo_newprevlog2.ID_Station_No) 
ON dbo_leader_name.ID = dbo_newprevlog2.ID_Leader_Name) ON dbo_noted_by.ID = dbo_newprevlog2.ID_Noted_By) ON (dbo_shopfloorcells.PKID = dbo_Line_Cell_Binding.ID_Cell_Shop_Floor) 
AND (dbo_shopfloorcells.ID_Shop_Floor = dbo_Shop_Floor.ID)
GROUP BY dbo_newprevlog2.ID, dbo_newprevlog2.Status, dbo_Shop_Floor.Shopfloor, dbo_shopfloorcells.Cell, dbo_Line_Cell_Binding.Line_Name, 
dbo_Machine.Machine_Section, dbo_Station.Station_, dbo_Tech_Name.Technician_Name, dbo_Maint_Category.Maintenance_Category, dbo_Fault_Desc.Fault_Description, 
dbo_newprevlog2.Intervention, dbo_newprevlog2.Remarks, dbo_newprevlog2.ComponentsParts, dbo_newprevlog2.StartDate1, dbo_newprevlog2.EndDate1, dbo_newprevlog2.StartTime1, 
dbo_newprevlog2.EndTime1, dbo_newprevlog2.DurationTime, dbo_newprevlog2.ID_Shop_Floor, dbo_Line_Cell_Binding.ID_Cell_Shop_Floor
having (dbo_newprevlog2.ID_Shop_Floor = $shopfloor) AND ((dbo_newprevlog2.ID_Tech_Name = $tech));");
我不知道该怎么办。例如,我尝试过将$tech改成这样(感谢这个论坛的用户@Déjávu):

但这并没有给我这个场合所需的结果。

方法1 试试下面的方法

$tech = ($_GET['Combobox10'] != "all") ? $_GET['Combobox10'] : "dbo_newprevlog2.ID_Tech_Name";

$shopfloor = ($_GET['Combobox8'] != "all") ? $_GET['Combobox8'] : "dbo_newprevlog2.ID_Shop_Floor";

我们的想法是跳过
mysql\u查询
最后一行的检查(
having
),并使其始终为真


方法2(推荐) 虽然更好的解决方案是完全改变您的
mysql\u查询
,跳过这些检查

更改sql查询(在注释后进行修改以满足您的需要)

请注意,$check部分实际上决定应用哪些SQL查询参数,这取决于是否选择了组合框中的一个或两个“全部”

这一点不需要改变

$tech= $_GET['Combobox10'];
$shopfloor = $_GET['Combobox8'];

上次赋值后,$tech的值是多少?是的,我可以按照您上次的解决方案(更改SQL查询)进行操作,但是我如何才能让它与同一查询中的其他变量一起工作?因此,我也需要绕过,就像在拥有。。。。还有…?@elstiv再次看一看,我已经根据您的评论更新了代码,并添加了代码上方的工作方式。告诉我它是否适合你的需要。
$tech = ($_GET['Combobox10'] != "all") ? $_GET['Combobox10'] : true;

$shopfloor = ($_GET['Combobox8'] != "all") ? $_GET['Combobox8'] : true;
$check = "";
    if ($tech != "all" or $shopfloor != "all") $check .= "having ";
    if ($tech != "all") $check .= "(dbo_newprevlog2.ID_Tech_Name = ".$tech.")";
    if ($tech != "all" and $shopfloor != "all") $check .= " AND ";
    if ($shopfloor != "all") $check .= "(dbo_newprevlog2.ID_Shop_Floor = ".$shopfloor.")";
    
    $result = mysql_query ("SELECT * FROM dbo_shopfloorcells INNER JOIN (dbo_noted_by INNER JOIN (dbo_leader_name INNER JOIN (dbo_Station INNER JOIN (dbo_Shop_Floor INNER JOIN (dbo_Fault_Desc INNER JOIN 
    (dbo_Machine INNER JOIN (dbo_Line_Cell_Binding INNER JOIN (dbo_Tech_Name INNER JOIN (dbo_Maint_Category INNER JOIN dbo_newprevlog2 ON dbo_Maint_Category.ID = dbo_newprevlog2.ID_Maint_Cat) 
    ON dbo_Tech_Name.ID = dbo_newprevlog2.ID_Tech_Name) ON dbo_Line_Cell_Binding.PKID = dbo_newprevlog2.ID_Line_Desc) ON dbo_Machine.PKID = dbo_newprevlog2.ID_Mach_Desc) 
    ON dbo_Fault_Desc.ID = dbo_newprevlog2.ID_Fault_Desc) ON dbo_Shop_Floor.ID = dbo_newprevlog2.ID_Shop_Floor) ON dbo_Station.PKID = dbo_newprevlog2.ID_Station_No) 
    ON dbo_leader_name.ID = dbo_newprevlog2.ID_Leader_Name) ON dbo_noted_by.ID = dbo_newprevlog2.ID_Noted_By) ON (dbo_shopfloorcells.PKID = dbo_Line_Cell_Binding.ID_Cell_Shop_Floor) 
    AND (dbo_shopfloorcells.ID_Shop_Floor = dbo_Shop_Floor.ID)
    GROUP BY dbo_newprevlog2.ID, dbo_newprevlog2.Status, dbo_Shop_Floor.Shopfloor, dbo_shopfloorcells.Cell, dbo_Line_Cell_Binding.Line_Name, 
    dbo_Machine.Machine_Section, dbo_Station.Station_, dbo_Tech_Name.Technician_Name, dbo_Maint_Category.Maintenance_Category, dbo_Fault_Desc.Fault_Description, 
    dbo_newprevlog2.Intervention, dbo_newprevlog2.Remarks, dbo_newprevlog2.ComponentsParts, dbo_newprevlog2.StartDate1, dbo_newprevlog2.EndDate1, dbo_newprevlog2.StartTime1, 
    dbo_newprevlog2.EndTime1, dbo_newprevlog2.DurationTime, dbo_newprevlog2.ID_Shop_Floor, dbo_Line_Cell_Binding.ID_Cell_Shop_Floor".$check.";");
$tech= $_GET['Combobox10'];
$shopfloor = $_GET['Combobox8'];