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
と を、テーブル内の行への 3 つの異なるポインター、またはリレーションから値を取得する別の変数to_country
と考えてください。days
3 つすべてで同じアイテムを説明し、それぞれがその名前に関連付けられたフィールドを参照するようにします。これにより、上記の条件が発生します。
適切に設計されたテーブルのように、この不適切に設計されたテーブルにアクセスするために、ビューを作成することもできます。
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)
これにより、4 つの列を持つビューが作成され、そこから簡単に選択できます。
SELECT days FROM viewName WHERE from_country LIKE 'A%'
またはあなたが選択したいもの。左結合のため、一部のアイテムの欠損値は値になることに注意してくださいNULL
。これは、上記のクエリとは対照的です。このクエリでは、3 つの値すべてが指定されていないアイテムは省略されます。状況により適したものを使用してください。