0

I'm trying to create a list in PHP of the oldest entries for each user in the database.

SELECT *, 
MIN(`entries`.`entry_date`) 
AS entry_date 
FROM (`entries`) 
JOIN `user_profiles` 
ON `user_profiles`.`user_id` = `entries`.`user_id` 
WHERE `status` = 1 
GROUP BY `entries`.`user_id`

I'm using the query to retrieve from the entries table the oldest dated entry using MIN()and joining with table user_profiles for other data. The query should select the oldest entry for each user. It seems to work but it retrieves the wrong entry_date field on some entries when I echo them. Please help, I can't spot what I'm doing wrong..

4

2 に答える 2

3

サブクエリを使用し(user_id, entry_date)て各ユーザーのペアを取得し、それを対象のレコードを選択するクエリと結合する必要があります。

SELECT *
FROM   entries
  NATURAL JOIN (
    SELECT   user_id, MIN(entry_date) AS entry_date
    FROM     entries
    GROUP BY user_id
  ) AS tmin
  JOIN user_profiles USING (user_id)
WHERE  status = 1
于 2012-05-29T23:09:43.190 に答える
0

エントリ テーブルではなく、user_profiles テーブルから問題にアプローチしてみましたか? ユーザーにエントリがない場合、上記のクエリには表示されません。

これは役立つかもしれませんが、それが完全な解決策であるかどうかはわかりません:

SELECT *, MIN(entries.entry_date) as entry_date
FROM user_profiles LEFT JOIN entries USING (user_id)
WHERE status = 1
GROUP BY user_profiles.user_id

また、MIN(entires.entry_date) の名前を entry_date に変更していますが、既に entry_date という名前の列があります。派生列の名前を「min_entry_date」などの一意の名前に変更してみてください。

于 2012-05-29T23:40:26.060 に答える