Php 根据下拉选择调整查询
我想得到的是: 我的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。当然
$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'];