我试图从传递给我的班级的未知变量数组(在 php 中)构建一个 mysql 语句。问题本身不在于构建语句(我可以做到),而在于创建更好、更有效的语句。
我简化了下表,仅显示核心属性。
我有一张主桌(一份工作)
工作
jid, j_ref
然后链接到包含所有作业属性的第二个表
作业属性
jpid,jid,j_arg,j_value
示例数据:
工作
jid: 1
j_ref: AB12345
作业属性
jpid: 1, jid: 1, j_arg: address_1, j_value: 123 somewhere street
jpid: 2, jid: 1, j_arg: address_2, j_value: some lovely town
jpid: 3, jid: 1, j_arg: salary, j_value: 50000
jpid: 4, jid: 1, j_arg: job_type, j_value: permanent
....
所以作业 1 (jid=1) 具有这 4 个属性(jpid 只是一个唯一的自动增量 ID)。
现在,当搜索进入时,我想根据 job_properties 进行搜索。搜索当然可以包括一些和/或任何属性。我只想从查询中收到 jid(显然是唯一的,所以不是 4 个相同的 jid)。
我目前对这个问题进行编码的方式是有多个IN
子句,它们会产生如下内容:
select j.jid from job j where
jid in (select jid from job_properties where j_arg='salary' and j_value > '40000')
and
jid in (select jid from job_properties where j_arg='address_2' and j_value='some lovely town') ... (insert more IN clauses for each value that is passed to the search)
我遍历传递的数组中的每个变量,并将另一个IN
子句添加到 where 语句。
但是我觉得这效率很低,当我开始接收大量搜索时,它真的会变慢(一个工作可以有 20-30 个属性)。
有没有更好的方法,也许使用 HAVING 和 group by's?
它类似于这个问题:Select mysql data with where clause in 2 tables,但我还需要查询另一个表中的参数,而不仅仅是属性。
提前致谢
缺口
PS 我不能缓存结果,也不用担心创建的开销,因为显然结果取决于搜索时数据库中的作业,并且每小时都会更改。