我正在创建一个包含4列的数据库,“Type”,“Compatible”,“StockLevel”,“Cost”。
类型可能是“电池”,兼容字段是此电池使用的设备的ID ...例如“1,4,9”。
我需要PHP做的是在“兼容”行中查询包含$ _POST [compatible]的所有“类型”的数据库。当然这并不像IF X = X那么简单,因为我们首先需要(php)爆炸Compatible字段。
我的头疼,我仍在努力寻找解决方案,但我会粘贴我的代码,并希望你们中的一方可以提供一些帮助。
IF ($_POST["printer"]) {
$printerinfo_query = mysql_query("SELECT * FROM printers WHERE ID LIKE '$_POST[printer]'");
$printerinfo_result = mysql_fetch_assoc($printerinfo_query);
echo ("<H5>".$printerinfo_result["Model"]."</H5>");
echo "".$printerinfo_result["Description"]."";
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$cartridge_query = mysql_query("SELECT * FROM cartridges");
$cartridge_result = mysql_fetch_assoc($cartridge_query);
$explode = $cartridge_result["Compatible"];
$explodedata = explode(", ", $explode);
$explode_count = count($explodedata);
$explode_count_dec = count($explodedata);
$explode_number = "0"; // Re-creates $explodedata[0], [1], [2] etc.. using $explodedata[$explode_number] in the loop!
echo ("<P>Select a cartridge type —</P>");
echo "<form action='index.php?page=printeradv' method='POST'>";
while ($explode_count_dec > "0"):
$while_query = mysql_query("SELECT * FROM cartridges WHERE ID LIKE '$explodedata[$explode_number]'");
$while_result = mysql_fetch_assoc($while_query);
echo "<input type='radio' value='".$explodedata[$explode_number]."' name='cartridge' />".$while_result["Type"]." <BR /> ";
++$explode_number;
--$explode_count_dec;
endwhile;
echo "<input type='submit' value='Select model' />";
echo "</form>";
}
答案 0 :(得分:3)
您不需要使用explode()
,我不知道为什么在您实际使用野生字符时使用LIKE。
您可以直接使用$cartridge_result['Compatible']
进行搜索,如下所示:
... WHERE ID IN('.$cartridge_result['Compatible'].')'
答案 1 :(得分:1)
我认为你需要添加一个额外的关系表来将你的电池与设备联系起来。这是一个非常简单的表格:
relationid | batteryId | DEVICEID
这使您可以执行简单查询以获取所有兼容的电池或设备。这是管理诸如此类的多对多关系的标准做法。最终结果是您可以运行单个查询来确定兼容性,之后在PHP中的处理很少。