私は3つのテーブルを持っており、私はいくつかのデータを取得するためにそれらに参加しています。GROUP_CONCAT選択の条件
----------------- Table Name: users ------------------------------- |user_id | user_name | ------------------------------- 123 | abc ------------------------------- 223 | bcd ------------------------------- 323 | cde ------------------------------- ----------------- Table Name: limit ------------------------------- user_id | limit_id ------------------------------- 123 | 1 ------------------------------- 223 | 2 ------------------------------- 323 | 3 ------------------------------- 323 | 4 ------------------------------- ------------------------- Table Name: limit_setting ------------------------------- limit_id | date_limit ------------------------------- 1 | 2016-09-29 12:00:00 ------------------------------- 2 | 2016-09-28 12:00:00 ------------------------------- 3 | 2016-09-27 12:00:00 ------------------------------- 1 | 2016-09-27 12:00:00 ------------------------------- 1 | 2016-09-24 12:00:00 ------------------------------- 4 | 2016-09-25 12:00:00 ------------------------------- 4 | 2016-09-26 12:00:00 -------------------------------
このような結果を得る必要があります。私は日付列のGROUP_CONCATについています。 日付の列は、MAXの日付以外のすべての項目を含む必要があります。そのリミットIDのlimit_setting
テーブルにエントリが1つしかない場合、そのユーザーには何も表示されません。 count_dates
:limit_setting
テーブルに存在するエントリの数。
Desired output ---------------------------------------------------------------------- user_name | dates | count_dates ---------------------------------------------------------------------- abc | 2016-09-27 12:00:00 , 2016-09-24 12:00:00 | 3 ---------------------------------------------------------------------- bcd | | 1 ---------------------------------------------------------------------- cde | | 1 ----------------------------------------------------------------------- cde | 2016-09-26 12:00:00 | 2 -----------------------------------------------------------------------
SELECT PP.`user_name`, count(ESL.Limit_id) as count_dates,
GROUP_CONCAT(ESL.date_limit SEPARATOR ',') as dates
FROM users as PP INNER JOIN `limit` as PAL ON PP.Id = PAL.PlayerId
LEFT JOIN limit_setting as ESL ON ESL.LimitId = PAL.limitId
GROUP BY PAL.limitId
さらに私は、私はそれを効果的に使用する方法がわからFind_in_set
と試みたがない(何も返されない)で
SELECT ESL.date_limit, MAX(date_limit) as max_date, PP.`user_name`, count(ESL.Limit_id) as count_dates,
GROUP_CONCAT(ESL.date_limit SEPARATOR ',') as dates
FROM users as PP INNER JOIN `limit` as PAL ON PP.Id = PAL.PlayerId
LEFT JOIN limit_setting as ESL ON ESL.LimitId = PAL.limitId
GROUP BY PAL.limitId
HAVING ESL.date_limit > max_date
を試してみました。
感謝あなたはあまりにも助けと説明のために...私は決して前に 'SUBSTRING_INDEX'を使用したことはありませんし、それについては全く考えていませんでした...もう一度感謝:) – user2595861