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
Możesz dodać więcej ograniczeń, jeśli chcesz filtrować według from_country.meta_value
lub podobne. I powinieneś zastąpić tableName
z rzeczywistą nazwą tabeli.
Pomyśl o from_country
, to_country
i days
jako trzy różne wskaźniki do wierszy w Twojej tabeli lub alternatywnie różne zmienne pobierające wartości z Twojej relacji. Chcesz, aby wszystkie trzy opisywały ten sam element, a także chcesz, aby każdy z nich odwoływał się do pola powiązanego z jego nazwą. Skutkuje to warunkami określonymi powyżej.
Możesz nawet utworzyć widok, aby uzyskać dostęp do źle zaprojektowanej tabeli jak do prawidłowo zaprojektowanej:
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)
Spowoduje to utworzenie widoku z czterema kolumnami, z których można po prostu wybrać:
SELECT days FROM viewName WHERE from_country LIKE 'A%'
lub cokolwiek chcesz wybrać. Zwróć uwagę, że z powodu lewych złączeń brakujące wartości niektórych elementów spowodują wynik NULL
wartości. Jest to w przeciwieństwie do powyższego zapytania, które pominie każdy element, który nie ma określonych wszystkich trzech wartości. Użyj tego, co jest bardziej odpowiednie w Twojej sytuacji.