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