1

次のmysqlテーブルがあります

ID (int)        parent_id (int)        title (str)     date (int - unix timestamp)
------------------------------------------------------------------------------------
252                 2                  Title 1         1378872876  (01. sept)
262                 2                  Title 2         1378870827  (02. sept)
273                 3                  Title 3         1378870800  (04. sept)
296                 3                  Title 4         1378869614  (05. sept)
301                 2                  Title 5         1378869384  (02. sept)
324                 4                  Title 6         1378868522  (02. sept)
339                 3                  Title 7         1378865096  (03. sept)
355                 3                  Title 8         1378864830  (02. sept)
365                 4                  Title 9         1378863323  (04. sept)
366                 4                  Title 10        1378863240  (02. sept)
376                 2                  Title 11        1378859731  (01. sept)
381                 5                  Title 12        1378858380  (03. sept)
388                 3                  Title 13        1378858080  (02. sept)
392                 4                  Title 14        1378857600  (04. sept)

私がしたいのは、UNIX タイムスタンプ (日のみ) で並べ替えられたすべての行を選択するだけでなく、parent_id でグループ化することです。したがって、SQL クエリは次を返す必要があります。

ID (int)        parent_id (int)        title (str)     date (int - unix timestamp)
------------------------------------------------------------------------------------
296                 3                  Title 4         1378869614  (05. sept)
273                 3                  Title 3         1378870800  (04. sept)
339                 3                  Title 7         1378865096  (03. sept)
388                 3                  Title 13        1378858080  (02. sept)
355                 3                  Title 8         1378864830  (02. sept)
392                 4                  Title 14        1378857600  (04. sept)
365                 4                  Title 9         1378863323  (04. sept)
366                 4                  Title 10        1378863240  (02. sept)
324                 4                  Title 6         1378868522  (02. sept)
381                 5                  Title 12        1378858380  (03. sept)
262                 2                  Title 2         1378870827  (02. sept)
301                 2                  Title 5         1378869384  (02. sept)
252                 2                  Title 1         1378872876  (01. sept)
376                 2                  Title 11        1378859731  (01. sept)

私は次のことを試しましたが、それは本当に私が望むものではありません:

 SELECT 
         f.*, 
         FROM_UNIXTIME(f.post_date , '%d' ) AS day, 
         FROM_UNIXTIME(f.post_date , '%H' ) AS hour 
    FROM feeds f 
    WHERE f.parent_id IN (200,194,176,182,190,181,189,196,191) 
    GROUP BY f.parent_id 
    ORDER BY f.post_date DESC  
    LIMIT 0,100

これは mysql でのみ行うことができますか、それとも複数のクエリを作成する必要がありますか?

4

3 に答える 3

2
SELECT f.*
FROM feeds f
INNER JOIN (SELECT parent_id, MAX(post_date) AS Ordered GROUP BY parent_id) o
ON f.parent_id = o.parent_id
ORDER BY o.Ordered
于 2013-09-11T06:54:15.357 に答える
0

最新の投稿をparent_idで検索し、そのタイムスタンプを最初の列として並べ替え、parent_idを2番目(2つの同じタイムスタンプの場合)、最後に実際のタイムスタンプで検索します。

SELECT 
     f.*, 
     FROM_UNIXTIME(f.post_date , '%d' ) AS day, 
     FROM_UNIXTIME(f.post_date , '%H' ) AS hour 
FROM feeds f
JOIN ( SELECT parent_id, MAX( post_date ) as latest_post
          FROM feeds
          GROUP BY parent_id ) fl
ON f.parent_id = fl.parent_id
ORDER BY fl.latest_post DESC, parent_id, f.post_date DESC
于 2013-09-11T07:02:24.310 に答える
0

グループ化されていない列をどのように集計する必要があるかを mysql に伝える必要があります。ご注文の際は、別名日または機能で承ります。すなわち:

ORDER BY FROM_UNIXTIME(f.post_date , '%d' )

また

ORDER BY DAY

エイリアスの DAY は予約済みのキーワードかもしれないので、変更することを検討します。

于 2013-09-11T07:05:21.870 に答える