我有2个表,一封电子邮件:id,电子邮件和一个meteemails:id,eid(来自电子邮件的id),field_name,field_info)
ill举个例子:我在发送一些电子邮件的metaemails:field_name =“source”,field_info =“uk”; field_name =“status”,field_value =“active”。
我想查询在metaemails中包含这些字段的所有电子邮件。
提前致谢
答案 0 :(得分:0)
它看起来有点棘手,你不能加入这两个表并放置两个WHERE
条件:如果你做了类似的事情
WHERE field_name = 'source' AND field_info = 'uk'
AND field_name = 'status' AND field_info = 'active'
你总是会得到零结果,因为那个条件总是假的,因为同一个字段不能有两个不同的值。
获取所需信息的一种方法是:为您需要的每个元值执行JOIN。 例如,查询:
SELECT e.id, mesrc.field_value source, mesta.field_info status
FROM emails e
JOIN metaemails mesrc ON e.id = mesrc.eid AND mesrc.field_name = 'source'
JOIN metaemails mesta ON e.id = mesta.eid AND mesta.field_name = 'status';
会给你这样的东西:
id source status
1 uk active
2 fr active
3 uk inactive
我编制了数据,当然(你可以看到我做了here)。基本上,我们是第一次将每封电子邮件与一个"来源" meta,第二次将它与" status"元。现在,您实际上可以使用所需的WHERE
条件,例如:
SELECT e.id, mesrc.field_value source, mesta.field_info status
FROM emails e
JOIN metaemails mesrc ON e.id = mesrc.eid AND mesrc.field_name = 'source'
JOIN metaemails mesta ON e.id = mesta.eid AND mesta.field_name = 'status'
WHERE mesrc.field_info = 'uk'
AND mesta.field_info = 'active';