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
テーブル内の行への3つの異なるポインタとして、または代わりにリレーションから値を取得する異なる変数として。 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つの値すべてが指定されていないアイテムを除外する上記のクエリとは対照的です。状況に応じて適切なものを使用してください。