Mysql选择条件逻辑

时间:2012-07-04 16:03:06

标签: mysql select

我想对以下内容提供一些帮助:
(我的描述可能看起来很奇怪,如下图所示:)

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

我的问题是我不知道如何选择使用条件逻辑,所以它从每个'item_id'中选择'days'来匹配'from'和'to'。

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

example

1 个答案:

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