0

我需要一些帮助:(
我的描述可能看起来很奇怪,下面的示例图片:)

为了生成图表,我想根据表单生成的查询选择“天”(在此阶段,查询将仅包含“来自”和“到”国家/地区)。

我的问题是我不知道如何选择使用条件逻辑,因此它从每个具有匹配“来自”和“到”的“item_id”中选择“天”。

(另一个问题是我不知道任何好的关键字或实际上如何调用它,所以请原谅我,我只是做了一些盲目的谷歌搜索并试图在这里找到类似的问题)

例子

4

1 回答 1

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_countrydays

您甚至可以创建一个视图,以便像正确设计的那样访问这个设计不佳的表:

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值。这与上面的查询形成对比,上面的查询将省略任何没有指定所有三个值的项目。使用更适合您的情况的任何东西。

于 2012-07-04T16:47:59.123 回答