新用户注册恢复喜悦村十周年

关于一个mysql 设计的问题

是这样的,我有一个简历表

比如有字段
     姓名 性别 年龄 求职岗位类别 工作地点

问题就出在岗位类别,因为一个人可能有很多个岗位类别
   我现在将每个岗位类别用分号分开,如    ;1701;1171;1891;1999;1961;
每组数字多是一个分类  ,如1701是计算机it软件类

那么查询的时候, like "';%1701%;"
这样的话索引就不起作用,问有没有好的办法!
如果岗位不多的话,是否可以弄多个字段,0,1表示状态,你这样用like索引是不起作用
分表吧,岗位单独一个表
纸上得来终觉浅 绝知此事要躬行
你用 like "';%1701%;"的话,索引肯定是不起作用的

[ 本帖最后由 linren119 于 2007-7-9 11:30 AM 编辑 ]
纸上得来终觉浅 绝知此事要躬行
这个有点类似于权限管理可以使用质数方法或者二进制方法
我说一下二进制的方法

岗位单独设置一个表
create table station(
post_id int(11) not null default 0,
post_name varchar(32) not null default '');

对于resume
姓名 性别 年龄 求职岗位类别 工作地点

create table resume(
resume_id int(11) not null primary key auto_increment,
name varchar(32) not null,
sex  enum("Y","n"),
age  tinyint(2) not null,
post_id int(11) not null,
address text);

这样建立简历表
处理的时候对于不同的岗位 假设岗位表中
1(pow(2,0))   程序员
2(pow(2,1))  分析员
4(pow(2,2))  架构师
注意post_id必须为pow(2,n)数

当一个人记录即是程序员又是分析员的时候
简历表中的记录为
xs y 20 3 beijing的时候
由于post_id为程序员和设计员和,所以可以用函数解析

function parse_station($type)
    {
       $station_list = array(从station表中取出所有的岗位列表数组)
        $arr   = array_keys($station_list); //如 array(1,2,4,8)这样的数组
        array_pop($arr);
        $total = array_sum($arr);
        arsort($arr);
        //不是数字或者大于所有权限值之和
        if (!is_numeric($type) || $type > $total) {
            return false;
        }
        while ($type > 0) {
            $f_elem   = array_shift($arr);
            $var_eval = "if ($type >= $f_elem) { \$type = $type % $f_elem; \$new_arr[] = $f_elem; } ";
            foreach ($arr as $value) {
                $var_eval .= " else if ($type >= $value) { \$type = $type % $value; \$new_arr[] = $value; }";
            }
            eval($var_eval);
        }
        return @array_unique($new_arr);
    }
这样把
$arr = parse_station(3);
就是array(1,2)这样的数组
在执行
select post_name from station where post_id in (".implode(",",$arr).")";
这样的查询语句就可以获取岗位名称了.
易企业商业网址导航
b2b、b2c、c2c商业网站收藏。至于于中国的 b2c发展
多对多的关系 如果感觉字符串查询慢的话就 建立一个关系表 到时候联查
又该换马甲了.....
原帖由 蟋蟀 于 2007-7-9 12:20 PM 发表
这个有点类似于权限管理可以使用质数方法或者二进制方法
我说一下二进制的方法

岗位单独设置一个表
create table station(
post_id int(11) not null default 0,
post_name varchar(32) not null default  ...
辛苦你了,我要好好参考一下
不知道理解的对不对
建议使用 "  , " 逗号进行分割,
使用found_in_Set(字段名)
原帖由 linren119 于 2007-7-9 11:19 AM 发表
分表吧,岗位单独一个表
我也这么认为!~
蟋蟀就是厉害
要是我第1分表做多对多
第2就是用found_in_Set了
用php来处理我就不行了 我算法太BC了!