在我的应用程序中,我有一个工作表。在作业表中有两个字段
在特定页面上我需要
show records where A=2 and B=$pageid (which will be any one id)
所以我所做的就是用条件预先制作表格,并制作一个数组,其中包含满足条件的作业ID列表,然后根据这些ID查询特定记录。
$jobs = $this->db->get("job_postings");
foreach($jobs->result_array() as $job)
{
$univArr = explode(",",$job["job_university"]);
if((in_array($univid,$univArr)) or ($job["job_post_to"]==2)) {
$jobArr[] = $job["id"];
}
}
return $jobArr;
但我觉得这不是正确的做法。有没有更好的方法呢。
答案 0 :(得分:2)
这里的问题是您的值列表存储在一个以逗号分隔的字段中。如果您有一个正确的3NF架构,那么您将拥有从大学ID到发布ID的映射表,您可以使用如下查询:
SELECT * FROM job_postings, universities, university_to_job WHERE
job_postings.job_post_to=2 AND
university_to_job.job_id=job_postings.job_id AND
university_to_job.university_id=universities.university_id AND
universities.name="Juliard College"
这将选择Juliard College的所有职位发布,并可以扩展到任意一组大学ID。
就目前而言,您可以通过在SQL服务器上存储过程返回逗号分隔的job_university
列中的字段ID的拆分列表来执行此操作,但我强烈建议您更改数据库架构以使用适当的映射表。
详细说明,现在您的job_university
列中可能包含类似“3,5,8”的内容,表明该职位适用于ID为3,5和8的大学。正确的关系 - 构建这个代数的方法是拥有一个独特的职位发布ID(支票),一个独特的大学ID(支票),然后是一个这样的表:
job_posting_id, university_id
1 , 3
1 , 5
1 , 8
此表格会将职位发布号码1映射到3号,5号和8号大学。
一旦你有了这个映射表,你可以使用JOIN语句(我上面有一个隐含的语句)来只选择与某个大学或与某个职位发布相关的大学相关的职位。
这种情况的神奇词汇,其中每个工作可能与一个或多个大学相关联,并且每个大学有一个或多个工作是“多对多关系”。这就是为什么你需要一个映射表 - 每一方都可能与另一方的一个或多个相关联,你不想多次存储关于大学或工作的所有信息。
我强烈建议您访问以下网站,以了解有关构建数据库的更多信息:
答案 1 :(得分:0)
您使用什么数据库框架? $this->db->get("job_postings");
似乎检索所有记录,这不是你想要的。您可以向Where
添加get
条款吗?