1

MySQL クエリについてサポートが必要です。

CREATE OR REPLACE 
    DEFINER = CURRENT_USER
    VIEW users_phpscheduleit
AS
    SELECT 
            u.uid AS memberid,
            pass AS password, 
            mail AS email,
            pv1.value AS fname,
            pv2.value AS lname,
            pv3.value AS phone,
            e_add, e_mod, e_del, e_html, e_app, 
            is_admin, lang, timezone_scheduleit, 
            institution, logon_name
        FROM 
            users u, profile_values pv1, profile_values pv2, profile_values pv3
        WHERE
            u.uid = pv1.uid AND u.uid = pv2.uid AND u.uid = pv3.uid
            AND 
            pv1.fid = 26
            AND
            pv2.fid = 27
            AND 
            pv3.fid = 8;

別の PHP システムと統合している PHP アプリケーションの INSERT または UPDATE クエリでビュー テーブルを使用して編集できるようにするため、これにはリストを含めることはできません。私の users テーブルの長さは 442 で、そのうちの 1/2 しか得られません。

問題:
テーブル 内のすべての行を取得できusersません。なぜなら、すべての行が明らかprofile_values.fidに 26、27、または 8 であるとは限らないからです。

Q: ステートメントを微調整して、編集可能性を有効にするルールを破らずにそれらを含めるにはどうすればよいですか?

ps.興味深いことに、Drupal DBを介してphpScheduleItユーザーを認証しようとしています

4

1 に答える 1

1

すべての行の profile_values.fid が 26、27、または 8 であるとは限らないため、users テーブルのすべての行を取得できません。

これは、サポート レコードがない可能性があるデータが必要な場合に OUTER (IE LEFT/RIGHT) JOIN を使用する必要がある場合に、クエリで INNER JOIN が使用されるためです。クエリは ANSI-89 構文であり、OUTER JOIN 構文を一貫して実装していません。ANSI-92 構文を使用して書き直したクエリを次に示します。

   SELECT u.uid AS memberid,
          pass AS password, 
          mail AS email,
          pv1.value AS fname,
          pv2.value AS lname,
          pv3.value AS phone,
          e_add, e_mod, e_del, e_html, e_app, 
          is_admin, lang, timezone_scheduleit, 
          institution, logon_name
     FROM USERS u
LEFT JOIN PROFILE_VALUES pv1 ON pv1.uid = u.uid
                            AND pv1.fid = 26
LEFT JOIN PROFILE_VALUES pv2 ON pv2.uid = u.uid
                            AND pv2.fid = 27
LEFT JOIN PROFILE_VALUES pv3 ON pv3.uid = u.uid
                            AND pv3.fid = 8
于 2010-06-18T20:18:09.430 に答える