0

1つのテーブルからユーザーの登録日を選択するクエリがあります。

SELECT DATE(registered)
FROM users
WHERE user_id= ".$currentUser."
ORDER BY registered ASC
LIMIT 1

別のテーブルを結合して元のクエリを変更し、メンバーIDが特定の値を下回り、ACCESSの日付が特定の日付を下回る2番目のテーブル(「アクセス」)にユーザーが存在しないようにする必要があります。

LEFT JOIN access ON (users.user_id = access.user_id)
WHERE access.user_id < 500
AND access.date ... after March 1, 2012

これら2つをまとめる方法がわかりません。

4

2 に答える 2

2

条件全体を結合に入れる必要があります。そうしないと、効果的に内部結合になります。

...
LEFT JOIN access ON (
  users.user_id = access.user_id
  AND access.user_id < 500
  AND access.date >= '20120301'
)
WHERE access.user_id is null
...
于 2012-03-04T04:59:44.163 に答える
2

相関サブクエリを使用できます。例:

  SELECT DATE(u.registered)
    FROM users u
   WHERE u.user_id = ".$currentUser."

     AND NOT EXISTS (
             SELECT 1 
               FROM access a 
              WHERE u.user_id = a.user_id
                AND a.user_id < 500
                AND a.date > DATE '2012-03-01')

ORDER BY registered ASC 
LIMIT 1;

注:テーブル
に一致する行がない場合でも、行が返されaccessます。
あなたはおそらくこれを知っているでしょう...これASCはデフォルトのソート順なので、入力する必要はありません。

于 2012-03-04T05:00:23.103 に答える