0

exp_playa_relationshipsCMSの投稿の関係データと次のようなデータ構造を格納する単一のMySQLDBテーブル()を調べるSQLクエリを作成しようとしています。

rel_id  |  parent_entry_id  |  parent_field_id  |  child_entry_id
-----------------------------------------------------------------
55      |  3                |  2                |  1
56      |  3                |  2                |  4
58      |  1                |  2                |  4
59      |  8                |  4                |  2
60      |  8                |  5                |  1
63      |  4                |  2                |  3
64      |  9                |  4                |  6
65      |  9                |  5                |  3

rel_idは一意ですが、他の列は一意ではありません。

上記のデータから以下を生成したいと思います。

event_data_id  |  user_id  |  event_id
--------------------------------------
8              |  1        |  2
9              |  3        |  6

parent_field_id値自体は最終出力で破棄されますが、行がaまたはをchild_entry_id意味するかどうかを判断するために必要です。user_idevent_id

parent_entry_idですevent_data_id

だから平易な英語で私はしたい:

  1. またはのいずれかのparent_field_id値を持つ行をフィルタリングする45
  2. それらの行のうち、同じを共有するすべての行に参加したいと思いparent_entry_idます。
  3. parent_entry_idasを返しevent_data_idます。
  4. 同じ行child_entry_iduser_idifがであるとしてを返します。parent_field_id5
  5. 同じ行child_entry_idevent_idifがであるとしてを返します。parent_field_id4

私の現在のSQLクエリ(機能していません)はこれです:

SELECT
    t1.`parent_entry_id` AS event_data_id,
    t1.`child_entry_id` AS user_id,
    t1.`child_entry_id` AS event_id

FROM `exp_playa_relationships` AS t1
INNER JOIN `exp_playa_relationships` AS t2
ON t1.`parent_entry_id` = t2.`parent_entry_id`
WHERE t1.`parent_field_id` = 4 OR t1.`parent_field_id` = 5

私が具体的に理解できないのは、parent_entry_id(SQLは行ごとに2つの新しい行を作成する)で重複を作成しないようにする方法と、値child_entry_idとしてuser_idまたは値event_idに基づいて返す方法parent_field_idです。

どんなアイデアでも大歓迎です。

4

1 に答える 1

1

あなたはすっごく近いです:

SELECT t1.`parent_entry_id` AS event_data_id,
       t1.`child_entry_id` AS user_id,
       t2.`child_entry_id` AS event_id
FROM `exp_playa_relationships` AS t1
INNER JOIN `exp_playa_relationships` AS t2
        ON t2.`parent_entry_id` = t1.`parent_entry_id`
           AND t2.`parent_field_id` = 4
WHERE  t1.`parent_field_id` = 5

具体的には、関連するデータを取得する行セットを指定する必要があります。

ちなみに、現在のデータベース設計では、これらのタイプの頭痛の種がさらに発生します...情報を「結果」テーブルに引き出すことをお勧めします(これが目的でない限り)。

于 2013-03-14T23:34:28.613 に答える