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
Puoi aggiungere più restrizioni se desideri filtrare per from_country.meta_value
o simili. E dovresti sostituire tableName
con il nome effettivo della tabella.
Pensa a from_country
, to_country
e days
come tre diversi puntatori a righe nella tua tabella, o in alternativa diverse variabili che prendono valori dalla tua relazione. Si desidera che tutti e tre descrivano lo stesso elemento e si desidera anche che ciascuno di essi faccia riferimento al campo associato al suo nome. Ciò si traduce nelle condizioni sopra indicate.
Potresti anche creare una vista, per accedere a questa tabella mal progettata come se fosse progettata correttamente:
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)
Questo creerebbe una vista con quattro colonne, da cui potresti semplicemente selezionare:
SELECT days FROM viewName WHERE from_country LIKE 'A%'
o qualunque cosa tu voglia selezionare. Tieni presente che a causa dei join a sinistra, i valori mancanti per alcuni elementi risulteranno in NULL
valori. Ciò è in contrasto con la query precedente, che ometterà qualsiasi elemento che non ha tutti e tre i valori specificati. Usa ciò che è più appropriato nella tua situazione.