2012-03-28 17 views
0

Ich habe eine Tabelle Benennung related_products,Separate comma separated values ​​von MySQL-Tabelle

Wo products_id das Hauptprodukt ist.

und related_products_ids bestehen aus Produkt-IDs auf das Hauptprodukt bezogen.

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

I Kontrollkästchen haben,

<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 

Die Kontrollkästchen werden von PHP erzeugt,

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

Wie checked zu dieser Kontrollkästchen hinzuzufügen auf die related_products_ids Werte abhängig. Zum Beispiel im in der Produkt-ID 1.

Eine andere Sache: Ich möchte auch diese verwandten Produkte auf der Produktseite anzeigen. Wie geht das? Beispiel, Im in der Produktseite, wo products_id 1, ich möchte aus einer Tabelle wie table_name1 von related_products_ids die Produkte angezeigt werden soll.

UPDATE: ich diesen Code verwendet haben, zur Anzeige von Daten,

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

jedoch zeigt es nichts ..

Ist mein Code falsch? Bitte

helfen, wie ich weiß nicht, wie es zu tun. Danke.

+0

ist die Produktpalette nur '6' ?? –

+0

Lets sagen, ich habe nur 6 Produkte .. – Ken

+0

Generieren Sie 'Eingabe' Checkboxen auf der Serverseite (als' HTML')? Verwenden Sie 'jQuery'? –

Antwort

0

Zu allererst Ihre Kontrollkästchen sollten nicht die gleichen IDs haben.

etwas tun:

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

Offensichtlich Sie $ lst_product_ids = array angenommen haben (1,2,3,4,5,6) und $ arr_related_product_ids = array (1 => ‚1, 2,3,4,6 ', 2 => etc.)

UPDATE: Ihren Code zu diesem (EDIT ändern: nach auch die Auswahl '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>"; 
} 

Aber denken Sie daran auch Verwenden Sie für jeden Scheck unterschiedliche IDs kbox.

EDIT: Sie sollten wählen Sie auch ‚related_products_ids‘:

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

UPDATE: Werte anzuzeigen für die Komma-IDs getrennt und mit der aktuellen (wahrscheinlich unflexibel) -Methode durch Kommata getrennte Beziehungen zu speichern, werden Sie haben eine zusätzliche foreach($lst_rp as $rp_id) Schleife innerhalb der while-Schleife zu verwenden, und innerhalb der foreach-Schleife tun eine SQL wählen Sie für jede Verbindung stehendes Produkt, so etwas wie

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

UPDATE: Wenn Sie neue Probleme haben, sollten Sie vielleicht eine neue Frage abgeben und verlinken zu diesem als Referenz, sonst könnte das für immer so weitergehen.

Versuchen Sie diesen Code. Wenn Ihre Produkt-ID ein SQL-int(), dann müssen Sie keine Anführungszeichen in der Abfrage verwenden:

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

Sehr geehrter Herr, Bitte beachten Sie meinen oben veröffentlichten Beitrag. Wenn Ihr Code angewendet werden kann. – Ken

+0

@Ken: Siehe Update. – Stefan

+0

Es funktioniert! Danke. Jetzt habe ich ein anderes Problem. Wie kann ich Werte durch diese durch Komma getrennten Id anzeigen? Wie möchte ich diese verwandten Produkte anzeigen? – Ken

1

Ihre Methode nicht besonders skalierbar ist, mit dem Overhead für ähnliche Produkte Daten wachsen, wie Sie jede Macht des Hit 10. Ich würde empfehlen, dass Sie stattdessen mehrere Zeilen pro product_id haben. Sie können dann in_array() verwenden, um zu ermitteln, ob der produktbezogene Schlüssel in den Ergebnissen enthalten ist, die Sie jetzt haben.

Wenn Sie darauf bestehen, Ihre aktuelle Methode zu verwenden, werfen Sie einen Blick auf explode(), die Ihre Werte perfekt in ein Array trennt, mit dem Sie dann mit in_array() wie oben beschrieben arbeiten können.

Verwandte Themen