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
Sie können weitere Einschränkungen hinzufügen, wenn Sie nach from_country.meta_value
filtern möchten oder ähnliches. Und Sie sollten tableName
ersetzen mit dem tatsächlichen Namen der Tabelle.
Denken Sie an from_country
, to_country
und days
als drei verschiedene Zeiger auf Zeilen in Ihrer Tabelle oder alternativ verschiedene Variablen, die Werte aus Ihrer Beziehung übernehmen. Sie möchten, dass alle drei denselben Artikel beschreiben, und Sie möchten außerdem, dass sich jeder auf das mit seinem Namen verknüpfte Feld bezieht. Daraus ergeben sich die oben genannten Bedingungen.
Sie könnten sogar eine Ansicht erstellen, um auf diese schlecht gestaltete Tabelle wie auf eine richtig gestaltete zuzugreifen:
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)
Dies würde eine Ansicht mit vier Spalten erstellen, aus der Sie einfach auswählen könnten:
SELECT days FROM viewName WHERE from_country LIKE 'A%'
oder was auch immer Sie auswählen möchten. Beachten Sie, dass aufgrund der Linksverknüpfungen fehlende Werte für einige Elemente zu NULL
führen Werte. Dies steht im Gegensatz zur obigen Abfrage, bei der alle Elemente ausgelassen werden, für die nicht alle drei Werte angegeben sind. Verwenden Sie, was in Ihrer Situation besser geeignet ist.