PHP - MySQL 两表联查 | 显示不同类型

两表联查

需求

不同商品的属性扩展
如:

音乐:中文片名、英文片名、商品别名、介质/格式、国家地区、导演/指挥、主唱、长度、歌词
书:作者、出版社、图书书号、出版日期、图书页数、字数、所属分类
等…

思想

通过对产品类型划分,使用属性类别(attr_type)表作为中间表,对属性(attribute)扩展连接。

代码

1
2
3
4
5
//获取attr_type表数据
public function getAttrTypeList(){
$sql='select attr_type_name,count(attr_name) as `count` from attr_type natural left join attribute group by attr_type_id';
return $this->db->fetchAll($sql);
}

显示不同类型

controller

1
2
3
4
//显示属性
$attr_type_id=isset($_GET['attr_type_id'])?(int)$_GET['attr_type_id']:0;
$attr_model=new AttributeModel();
$attr_list=$attr_model->getAttrByTypeId($attr_type_id);

model

1
2
3
4
5
6
7
8
//通过属性类别id获取属性
public function getAttrByTypeId($attr_type_id){
$sql="select * from attribute natural join attr_type where 1";
if($attr_type_id>0)
$sql.=" and attr_type_id=$attr_type_id";
$sql.=' order by attr_type_id';
return $this->db->fetchAll($sql);
}

view

1
2
3
4
5
6
7
8
9
10
11
<div class="form-div">
<form action="" name="searchForm">
<img src="/Application/View/Admin/images/icon_search.gif" width="26" height="22" border="0" alt="SEARCH">
按商品类型显示:<select name="goods_type" onchange="location.href='index.php?p=Admin&c=Attribute&a=list&attr_type_id='+this.value">
<option value="0">所有商品类型</option>
<?php foreach($attr_type_list as $rows):?>
<option value="<?php echo $rows['attr_type_id']?>" <?php echo $rows['attr_type_id']==$attr_type_id?'selected':''?>><?php echo $rows['attr_type_name']?></option>
<?php endforeach;?>
</select>
</form>
</div>

切换选项禁用状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<form action="" method="post" name="theForm" >
<table width="100%" id="general-table">
<tr>
<td class="label">该属性值的录入方式:</td>
<td>
<input type="radio" name="attr_input_type" value="0" checked="true" onclick="radioClicked(0)">
手工录入
<input type="radio" name="attr_input_type" value="1" onclick="radioClicked(1)" <?php echo $info['attr_input_type']==1?'checked':''?>>从下面的列表中选择(一行代表一个可选值)
<input type="radio" name="attr_input_type" value="2" onclick="radioClicked(0)" <?php echo $info['attr_input_type']==2?'checked':''?>>多行文本框
</td>
</tr>
</table>
</form>
<script type="text/javascript">
/**
* 点击类型按钮时切换选项的禁用状态
*/
function radioClicked(n)
{
document.forms['theForm'].elements["attr_input_value"].disabled = n > 0 ? false : true;
}
</script>