0

次のことについて助けてください:
(私の説明はおそらく奇妙に思えるかもしれません。下の例の写真:)

グラフを生成するために、フォームによって生成されたクエリに基づいて「日」を選択したいと考えています (この段階では、クエリには「from」と「to」の国のみが含まれます)。

私の問題は、select で条件付きロジックを使用する方法がわからないため、「from」と「to」が一致するすべての「item_id」から「日」を選択することです。

(もう 1 つの問題は、適切なキーワードや実際にこれがどのように呼び出されるかがわからないことです。ご容赦ください。盲目的にグーグルで調べただけで、ここで同様の問題を見つけようとしました)

例

4

1 に答える 1

2
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_valuetableNameそして、テーブルの実際の名前に置き換える必要があります。

from_countryと を、テーブル内の行への 3 つの異なるポインター、またはリレーションから値を取得する別の変数to_countryと考えてください。days3 つすべてで同じアイテムを説明し、それぞれがその名前に関連付けられたフィールドを参照するようにします。これにより、上記の条件が発生します。

適切に設計されたテーブルのように、この不適切に設計されたテーブルにアクセスするために、ビューを作成することもできます。

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)

これにより、4 つの列を持つビューが作成され、そこから簡単に選択できます。

SELECT days FROM viewName WHERE from_country LIKE 'A%'

またはあなたが選択したいもの。左結合のため、一部のアイテムの欠損値は値になることに注意してくださいNULL。これは、上記のクエリとは対照的です。このクエリでは、3 つの値すべてが指定されていないアイテムは省略されます。状況により適したものを使用してください。

于 2012-07-04T16:47:59.123 に答える