我想对以下内容提供一些帮助:
(我的描述可能看起来很奇怪,如下图所示:)
为了生成图表,我想根据表单生成的查询选择“日期” (在此阶段,查询将仅包含'from'和'to'国家/地区。)
我的问题是我不知道如何选择使用条件逻辑,所以它从每个'item_id'中选择'days'来匹配'from'和'to'。
(另一个问题是,我不知道任何好的关键字或实际上是如何调用它,所以请原谅我,我只是做了一些盲目的谷歌搜索并试图在这里找到类似的问题)
答案 0 :(得分:2)
SELECT days.meta_value
FROM tableName AS from_country,
tableName AS to_country,
tableName AS days
WHERE from_country.item_id = to_country.item_id
AND from_country.item_id = days.item_id
AND from_country.field_id = 90
AND to_country.field_id = 93
AND days.field_id = 251
如果您想按from_country.meta_value
或类似内容进行过滤,则可以添加更多限制。您应该将tableName
替换为表的实际名称。
将from_country
,to_country
和days
视为表中行的三个不同指针,或者从您的关系中获取值的不同变量。您希望它们中的所有三个都描述相同的项目,并且您还希望它们中的每一个都引用与其名称相关联的字段。这导致上述条件。
你甚至可以创建一个视图,以便像正确设计的那样访问这个设计糟糕的表:
CREATE VIEW viewName AS
SELECT item.item_id AS item_id,
from_country.meta_value AS from_country,
to_country.meta_value AS to_country,
days.meta_value AS days
FROM (SELECT DISTINCT item_id FROM tableName) AS item
LEFT JOIN tableName AS from_country
ON (from_country.item_id = item.item_id AND
from_country.field_id = 90)
LEFT JOIN tableName AS to_country
ON (to_country.item_id = item.item_id AND
to_country.field_id = 93)
LEFT JOIN tableName AS days
ON (days.item_id = item.item_id AND
days.field_id = 251)
这将创建一个包含四列的视图,您可以从中选择:
SELECT days FROM viewName WHERE from_country LIKE 'A%'
或您想要选择的任何内容。请注意,由于左连接,某些项的缺失值将导致NULL
值。这与上面的查询形成对比,上面的查询将省略任何没有指定所有三个值的项目。在你的情况下使用更合适的东西。