我试图从传递给我的类的未知变量数组(在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(显然是唯一的,所以不是同一个jid中的4个)。
我目前编码此问题的方法是使用多个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)
我遍历传递的数组中的每个变量,并在where语句中添加另一个IN
子句。
有没有更好的方法来做到这一点,也许是使用HAVING和group by's?
它类似于这个问题:Select mysql data with where clause in 2 tables,但我还需要查询另一个表中的参数,而不仅仅是属性。
提前致谢
尼克
P.S我无法缓存结果而不担心创建的开销,因为显然结果取决于搜索时数据库中的作业,并且每小时都会发生变化。
答案 0 :(得分:0)
这是否会导致您的目标?
SELECT
j.jid
FROM
job j
JOIN jop_properties jp ON j.jid = jp.jid
WHERE
( j_arg = 'salary' AND j_value > '40000' )
OR ( j_arg = 'address_2' AND j_value = 'some lovely town' )
OR [insert more combinations here]
我想这个解决方案太容易了,我误解了一些东西。