【问题标题】:Separate comma separated values from mysql table从 mysql 表中分隔逗号分隔值
【发布时间】:2012-04-11 23:33:21
【问题描述】:

我有一个表命名为related_products,

在哪里 products_id是主打产品。

related_products_ids 包含与主要产品相关的产品ID。

--------------------------------------------
|   products_id   |   related_products_ids |
| -----------------------------------------
|    1            |  1,2,3,4,6,            |
| -----------------------------------------
|    2            |   1,2,3,                |
| -----------------------------------------
|    3            |   1,2,                  |
-------------------------------------------

我有复选框,

<input value="1" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 1
<input value="2" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 2
<input value="3" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 3
<input value="4" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 4
<input value="5" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 5 
<input value="6" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 6

复选框由php生成,

    <?php
    echo '<div class="categorydiv"><div id="category-all" class="tabs-panel"><ul id="categorychecklist" class="list:category categorychecklist form-no-clear">';
    $rp_sql = "select products_id, products_name from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id";
    $rp_1 = mysql_query($rp_sql);
    while($rp_2 = mysql_fetch_array($rp_1)) {
    echo "<li id=\"category-".$rp_2['products_id']."\" class=\"popular-category\"><label class=\"selectit\"><input value=\"".$rp_2['products_id']."\" type=\"checkbox\" name=\"rp_product[]\" id=\"in-category-1\"> ".$rp_2['products_name']."</label></li>";
    }
    mysql_free_result($rp_1);
    echo '</ul></div></div>';
    ?>

如何根据related_products_ids 值将checked 添加到这些复选框。例如,我在产品 id 1 中。

另一件事:我还想在产品页面中显示那些相关产品。怎么做? 例如,我在products_id 为1 的产品页面中,我想通过related_products_ids 显示table_name1 之类的表中的产品。

更新: 我已经使用此代码来显示数据,

$sql = "SELECT related_products_ids FROM ".TABLE_RELATED_PRODUCTS." where products_id = '" . (int)$_GET["products_id"]."'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$lst_rp = explode(',', $row['related_products_ids']);
foreach($lst_rp as $rp_id) {
$res = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id='" . $rp_id . "'";
}
$result1 = mysql_query($res);
while($row1 = mysql_fetch_array($result1)) {
echo $row1['products_name'];
}

但是,它什么也没显示..

我的代码错了吗?

请帮忙,因为我不知道该怎么做。 谢谢。

【问题讨论】:

  • 产品范围只是6 ??
  • 假设我只有 6 个产品..
  • 您是否在服务器端生成input 复选框(如HTML)?你在用jQuery吗?
  • 不要使用逗号分隔的关系。用id,product_id,related_product_id创建一个表productsrelated_products,列product_id,related_product_id是表products的外键。
  • 作为 HTML 先生。我不为此使用 jquery。

标签: php mysql checkbox


【解决方案1】:

您的方法不是特别可扩展,相关产品数据的开销会随着您达到 10 的每个幂而增加。我建议您改为每个 product_id 有多个行。然后,您可以使用 in_array() 来查找产品相关键是否在您现在拥有的结果中。

如果您坚持使用当前方法,请查看explode(),它会将您的值完美地分离到一个数组中,然后您可以将其与in_array() 一起使用,如上所述。

【讨论】:

    【解决方案2】:

    首先,您的复选框不应具有相同的 ID。

    做这样的事情:

    foreach ($lst_product_ids as $product_id) {
        $checked = '';
        $lst_rel_prods = explode(',', $arr_related_product_ids[$product_id]);
        if (in_array($product_id, $lst_rel_prods)) 
            $checked = " checked";
        echo "<input value='" . $product_id . "' type='checkbox' name='rp_product[]'" . $checked . ">
    }
    

    显然,假设您有 $lst_product_ids = array(1,2,3,4,5,6) 和 $arr_related_product_ids = array(1 => '1,2,3,4,6,', 2 =>等等)

    更新: 将您的代码更改为此(编辑:还选择“related_products_ids”后):

    while($rp_2 = mysql_fetch_array($rp_1)) {
        $checked = '';
        $lst_rp = explode(',', $rp_2['related_products_ids']);
        if (in_array($rp_2['products_id'], $lst_rp)) $checked = " checked";
        echo "<li id=\"category-".$rp_2['products_id']."\" class=\"popular-category\"><label class=\"selectit\"><input value=\"".$rp_2['products_id']."\" type=\"checkbox\" name=\"rp_product[]\" id=\"\"" . $checked . "> ".$rp_2['products_name']."</label></li>";
    }
    

    但也要记住为每个复选框使用不同的 id。

    编辑:您还应该选择“related_products_ids”:

    $rp_sql = "select products_id, products_name, related_products_ids from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id";
    

    更新:要显示逗号分隔 id 的值,并使用当前(可能不灵活)存储逗号分隔关系的方法,您必须在 while 循环和 foreach 内使用额外的 foreach($lst_rp as $rp_id) 循环循环为每个相关产品做一个 SQL 选择,比如

    $query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id;
    

    更新:如果您有新问题,您可能应该发布一个新问题并链接到这个问题作为参考,否则这可能会永远持续下去。

    试试这个代码。如果您的产品 ID 是 SQL int(),那么您不能在查询中使用引号:

    $sql = "SELECT related_products_ids FROM ".TABLE_RELATED_PRODUCTS." where products_id = " . $_GET["products_id"];   // I MADE CHANGES HERE
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);   // I MADE A CHANGE HERE
    $lst_rp = explode(',', $row['related_products_ids']);
    foreach($lst_rp as $rp_id) {
        $query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id;
        $result1 = mysql_query($res);    // THIS AND THE FOLLOWING MUST STAY INSIDE THE LOOP
        $row1 = mysql_fetch_assoc($result1);
        echo $row1['products_name'];
    }
    

    【讨论】:

    • 先生,请看我上面编辑过的帖子。如果您的代码可以应用。
    • 有效!谢谢。现在我有另一个问题.. 我怎样才能通过那些逗号分隔的 id 显示值?因为我想展示这些相关产品?
    • @Ken:我添加了有关如何执行此操作的提示。
    • 谢谢 Stefan .. 帮助很大。
    • 再次嗨,请查看我上面更新的帖子。我还有一个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2013-07-03
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多