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
Vous pouvez ajouter plus de restrictions si vous souhaitez filtrer par from_country.meta_value
ou similaire. Et vous devez remplacer tableName
avec le nom réel de la table.
Pensez à from_country
, to_country
et days
comme trois pointeurs différents vers des lignes de votre table, ou bien différentes variables prenant des valeurs à partir de votre relation. Vous voulez qu'ils décrivent tous les trois le même élément, et vous voulez également que chacun d'eux fasse référence au champ associé à son nom. Il en résulte les conditions énoncées ci-dessus.
Vous pourriez même créer une vue, afin d'accéder à cette table mal conçue comme à une table bien conçue :
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)
Cela créerait une vue à quatre colonnes, à partir de laquelle vous pourriez simplement sélectionner :
SELECT days FROM viewName WHERE from_country LIKE 'A%'
ou tout ce que vous voulez sélectionner. Notez qu'en raison des jointures à gauche, les valeurs manquantes pour certains éléments se traduiront par NULL
valeurs. Cela contraste avec la requête ci-dessus, qui omettra tout élément qui n'a pas les trois valeurs spécifiées. Utilisez ce qui est le plus approprié à votre situation.