2011-07-16 4 views
0

基本的には、ログインしたユーザーの状況に基づいて表示されるデータを選択することです。たとえば、ユーザーが試用ユーザーの場合、特定の日付範囲有料ユーザーの場合は、より長い期間を選択してください。以下のコードを試してみましたが、構文が正しくないというエラーが表示されます。どんな助けでも大歓迎です。MYSQLを使用して2つの異なるデータセットを選択する

IF (SELECT MemberStatus FROM user WHERE Memberstatus = 'Trial') 
THEN 
    SELECT * 
    FROM article 
    WHERE date > '1990/01/01'; 
ELSE 
    SELECT * 
    FROM article 
    WHERE date > '2000/01/01'; 
ENDIF; 
+2

あなたのロジックが間違っていますか?(試用ユーザーは> 1990/01/01、有料ユーザーは> 2000/01/01と言っているようです) –

+2

また、あなたのロジックがユーザテーブルのすべてのユーザに関するものでない限り、おそらく、クエリの 'SELECT MemberStatus ...'部分はユーザ名(値/パラメータ)を参照しているはずですか? –

答えて

1

である私はそれがこれを行うには間違っていると思います(ユーザーの状態を確認し、それに応じて項目を選択します)に1つのクエリ。試行制限を使用するか、コード内の別の場所で試用ステータスを表示する必要があります。したがって、ユーザーのプロファイルやバリエリのインスタンスに格納し、ユーザーのステータスに関するクエリを作成する方がよい。

+0

あなたのサーバースクリプトでチェックを行い、それに対応するクエリを使って必要なデータを取得します。ずっとシンプルでクリーナーで、ダイナミックでもあります。 – casraf

1

IFは必要ありません。また、これは、標準のSQL

SELECT * 
    FROM article 
    WHERE date > 
      CASE 
       WHEN EXISTS (SELECT * FROM user WHERE Memberstatus = 'Trial') 
          THEN '2000/01/01' 
       ELSE '1990/01/01' 
      END; 

編集です:質問へのコメントのとおり、利用者からのSELECTは、おそらく不完全

+0

@Shaun:ユーザーチェックを 'WHERE Memberstatus = 'Trial'やuserid = @ userX'に変更する必要があるでしょう。 –

+0

これは潜在的にうまくいくようですが、2つの異なるSELECTステートメント同じ基準で例: ユーザーが試用ユーザーの場合はリンクを選択し、試用ユーザーの場合はタイトルのみを選択します。ユーザのステータスに基づいて表示されるものを本質的に制限しますか? – Shaun

+0

@Shaun:それは2つのクエリになります。 'IF EXISTS(SELECT * FROM user WHERE Memberstatus = 'Trial')...を使用してください。 – gbn

関連する問題