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
стойности. Това е в контраст със заявката по-горе, която ще пропусне всеки елемент, който няма посочени и трите стойности. Използвайте каквото е по-подходящо във вашата ситуация.