Php 从mysql表中分离逗号分隔的值
我有一个命名相关产品的表格 在哪里Php 从mysql表中分离逗号分隔的值,php,mysql,checkbox,Php,Mysql,Checkbox,我有一个命名相关产品的表格 在哪里 产品\u id是主要产品 -------------------------------------------- | products_id | related_products_ids | | ----------------------------------------- | 1 | 1,2,3,4,6, | | --------------------------------------
产品\u id
是主要产品
--------------------------------------------
| products_id | related_products_ids |
| -----------------------------------------
| 1 | 1,2,3,4,6, |
| -----------------------------------------
| 2 | 1,2,3, |
| -----------------------------------------
| 3 | 1,2, |
-------------------------------------------
和相关产品\u id
由与主产品相关的产品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
但是,它没有显示任何内容
我的代码错了吗
请帮忙,我不知道怎么做。
谢谢。首先,您的复选框不应具有相同的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 . ">
}
更新:要显示逗号分隔id的值,并且使用当前(可能是不灵活的)存储逗号分隔关系的方法,您必须在while循环中使用额外的foreach($lst\u rp as$rp\u id)
循环,在foreach循环中为每个相关产品执行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'];
}
您的方法不是特别可伸缩的,相关产品数据的开销随着每10次幂的增加而增加。我建议您改为每个产品\u id有多行。然后您可以使用in\u array()来查找与产品相关的键是否在您现在拥有的结果中
如果您坚持使用当前的方法,请查看explode(),它会将您的值完美地分割成一个数组,然后您可以使用上面描述的in_array()。产品范围是否仅为
6
?假设我只有6个产品。您是否在服务器端生成输入
复选框(如HTML
)?您使用的是jQuery
?不要使用逗号分隔关系。使用id、product\id、related\u product\id
和products
创建一个表products
和related\u-products\u-id
,列products,related\u-id
都是表products
的外键。作为HTML,先生。我不使用jQuery。先生,先生请看我上面编辑过的帖子。如果你的代码可以应用,那就行了!谢谢。现在我有另一个问题..如何用逗号分隔的ID显示值?因为我想显示这些相关的产品?@Ken:我添加了一些提示。谢谢你Stefan..这是一个很大的帮助。你好,请再次查看我上面更新的帖子。我还有另一个问题。非常感谢。
$rp_sql = "select products_id, products_name, related_products_ids from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id";
$query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id;
$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'];
}