我希望在逗号分隔的MySql行中输入多个值,并使用Codeigniter在下拉列表中显示用户。例如,一个普通网站产品有各种值,如产品(颜色:红色,白色,蓝色,橙色),这些不同的值存储在一行中,并在下拉列表中向用户显示这些值。 我目前的清单显示为:
这是我的代码: 的模型
public function get_all()
{
$this->db->select()
->from('vendor_products')
->order_by(1,'DESC');
$data = $this->db->get();
$query = $data->result_array();
foreach ($query as $result) {
if ($result['color_values']) {
$result['color_values'] = explode(',' , $result['color_values']);
}
if ($result['size_values']) {
$result['size_values'] = explode(',',$result['size_values']);
}
}
return $query;
}
控制器
public function index()
{
$this->load->model('cartm');
$data['posts'] = $this->cartm->get_all();
$this->load->view('cart/index',$data);
}
查看:
<?php foreach($posts as $post) : ?>
<li>
<form method="post" action="<?=base_url();?>cart_test/add/">
<p><?=$post['pro_name'];?></p>
<img style="width: 100px;height: 100px" src="<?=base_url();?>uploads/<?=$post['prod_image'];?>">
<p>$<?=$post['prod_price'];?></p>
<?php if($post['color_values']) : ?>
<p>Color: <select>
<option><?=$post['color_values']?></option>
</select></p>
<?php endif; ?>
<?php if($post['size_values']) : ?>
<p>Size: <select>
<option><?=$post['size_values'];?></option>
</select></p>
<?php endif; ?>
</form>
</li>
<?php endforeach; ?>
答案 0 :(得分:0)
这样做的一种方法是创建一个看起来像这样的视图:
SELECT p.prod_id, p.pro_name, p.prod_image, GROUP_CONCAT(CONCAT(opt_color.option_value_id, '::', opt_color.option_value_name) SEPARATOR '||') AS color_options
FROM vendor_products AS p
LEFT JOIN vendor_products_options AS opt_color ON p.prod_id = opt_color .prod_id AND opt_color .option_id = 1
GROUP BY p.prod_id
-- Other joins for other options varying the option_id
请参阅此处的group_concat()函数参考:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat
然后使用模型的视图而不是表本身。提取选项的代码如下所示:
foreach ($query as $result) {
if (!empty($result['color_options'])) {
$result['color_options'] = explode('||', $result['color_options']);
}
}
在视图中为select生成HTML的代码:
<?php if($post['color_options']) : ?>
<p>Color:
<select>
<?php
foreach($post['color_options'] as $optValue) {
$option_array = explode('::', $optValue);
?>
<option value="<?=$option_array[0]?>"><?=$option_array[1]?></option>
<?php
foreach() {
?>
</select>
</p>
<?php endif; ?>