我有3个表表单,字段和类型。 表单有多个字段。字段具有类型。
有42种类型(纯粹的巧合,我发誓)。表单始终有42个字段。
所以,现在,我显示一个biiig表,其中包含所有相关的表单和字段。在每列的顶部,您可以过滤结果。
我的问题是我找不到一种过滤结果的“简单”方式。
我设法实现这一目标的唯一方法是制作子查询,如下所示:
(在这个例子中,我在Type.id = 169上过滤,值为“secret”)
SELECT a.id as fId, f.value, f.type_id
FROM `Form` a
LEFT JOIN Field f ON a.id = f.form_id
WHERE (
SELECT `value` FROM Field f2 WHERE f2.form_id = a.id AND f2.type_id = 169
) = 'secret'
ORDER BY a.date DESC
这是极端的,因为对于我添加的每个过滤器,我都有一个子查询。所以,10个过滤器= 10个子查询。
我认为有更好的方法可以做到这一点,但我无法理解,我希望你能帮助我理解它!
谢谢!
答案 0 :(得分:2)
您可以使用其他JOIN
s
SELECT a.id as fId, f.value, f.type_id
FROM `Form` a
LEFT JOIN Field f ON a.id = f.form_id
JOIN Field f2 ON f2.form_id = a.id
WHERE f2.type_id = 169
AND f2.value = 'secret'
ORDER BY a.date DESC
如果您要填写更多字段,请为其添加其他JOIN
,并将这些条件添加到WHERE
子句中:
SELECT a.id as fId, f.value, f.type_id
FROM `Form` a
LEFT JOIN Field f ON a.id = f.form_id
JOIN Field f2 ON f2.form_id = a.id
JOIN Field f3 ON f3.form_id = a.id
WHERE f2.type_id = 169
AND f2.value = 'secret'
AND f3.type_id = 55
AND f3.value = 'blah'
ORDER BY a.date DESC
创建查询的脚本可以根据搜索条件在循环中添加每个查询。