Отдельные значения, разделенные запятыми, из таблицы mysql - PullRequest
0 голосов
/ 28 марта 2012

У меня есть таблица с именами related_products,

Где products_id - основной продукт.

и related_products_ids состоят из идентификаторов продуктов, связанных с основным продуктом.

--------------------------------------------
|   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>';
    ?>

Как добавить checked к этим флажкам в зависимости от значений related_products_ids.Например, я в идентификаторе продукта 1.

Еще одна вещь: Я также хочу отобразить соответствующие продукты на странице продукта.Как это сделать?Например, я на странице продукта, где products_id равен 1, я хочу отобразить продукты из таблицы, например table_name1 на related_products_ids.

ОБНОВЛЕНИЕ: Я использовал этот код для отображения данных,

$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'];
}

Однако он ничего не отображает ..

Мой код неверен?

Пожалуйста, помогите, поскольку я не знаю, как это сделать.Спасибо.

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Ваш метод не особенно масштабируемый, так как накладные расходы на данные о связанных продуктах растут по мере того, как вы достигаете каждой степени 10. Я бы порекомендовал вам вместо этого иметь несколько строк на product_id.Затем вы можете использовать in_array (), чтобы определить, находится ли ключ, связанный с продуктами, в результатах, которые у вас сейчас есть.

Если вы настаиваете на использовании вашего текущего метода, взгляните на explode (), который разделит ваши значенияидеально в массив, который вы затем можете использовать с in_array (), как описано выше.

0 голосов
/ 28 марта 2012

Прежде всего, ваши флажки не должны иметь одинаковые идентификаторы.

Сделайте что-то вроде этого:

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>";
}

Но не забывайте также использовать разные идентификаторы для каждого флажка.

EDIT: Вы также должны выбрать «related_products_ids»:

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

ОБНОВЛЕНИЕ: для отображения значений для идентификаторов, разделенных запятыми, и с вашим текущим (возможно, негибким) способом хранения отношений, разделенных запятыми, вам придется использовать дополнительный цикл foreach($lst_rp as $rp_id) внутри цикла while и внутрицикл foreach делает выбор SQL для каждого связанного продукта, например,

$query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_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'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...