0

我正在创建一个具有 4 列的数据库,“类型”、“兼容”、“StockLevel”、“成本”。

类型可能是“电池”,兼容字段是与此电池一起使用的设备的 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 &mdash;</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>";

}
4

2 回答 2

3

您不需要使用explode(),我不知道您为什么在实际不使用通配符时使用 LIKE 。

您可以直接使用 搜索$cartridge_result['Compatible'],如下所示:

... WHERE ID IN('.$cartridge_result['Compatible'].')'
于 2012-05-14T13:42:39.640 回答
1

我认为您需要添加一个额外的关系表来将您的电池与设备相关联。这是一个非常简单的表:

关系ID | 电池ID | 设备ID

这使您可以进行简单的查询以获取所有兼容的电池设备。这是管理诸如此类的多对多关系的标准做法。最终结果是您可以运行单个查询来确定兼容性,并且之后在 PHP 中的处理是最小的。

于 2012-05-14T13:51:28.067 回答