获取每个主题的所有条目

时间:2016-06-27 23:14:35

标签: php mysql group-by distinct

我不确定这只是一个查询是否可行..(可能需要一些PHP解析?返回数据后?)

我已经设置了MySQL表。

列如下:

id  
topic   
title   
vimeo_id    
video_length    
speaker_first   
speaker_last    
speaker_designation 
description

记录如:

1   topic1  title-asda  1719887 speakerFirst-1  speakerLast-1   desc.xxx
2   topic2  title-asdf  1719554 speakerFirst-2  speakerLast-2   desc.xxx
3   topic1  title-ghty  1719445 speakerFirst-3  speakerLast-3   desc.xxx
4   topic3  title-bnh6  1719676 speakerFirst-4  speakerLast-4   desc.xxx
5   topic1  title-gffd  1711121 speakerFirst-5  speakerLast-5   desc.xxx
6   topic4  title-fgdf  1896621 speakerFirst-6  speakerLast-6   desc.xxx
7   topic2  title-tyuu  1005674 speakerFirst-7  speakerLast-7   desc.xxx

我希望得到一个输出(如果可能的话):

(即:唯一的TOPIC(不需要每次都列出)..以及发言者最后订购的子记录)

TOPIC1

  • title-asda 1719887 speakerFirst-1 speakerLast-1 desc.xxx
  • title-ghty 1719445 speakerFirst-3 speakerLast-3 desc.xxx
  • title-gffd 1711121 speakerFirst-5 speakerLast-5 desc.xxx

TOPIC2

  • title-asdf 1719554 speakerFirst-2 speakerLast-2 desc.xxx
  • title-tyuu 1005674 speakerFirst-7 speakerLast-7 desc.xxx

Topic3

  • title-bnh6 1719676 speakerFirst-4 speakerLast-4 desc.xxx

Topic4

  • title-fgdf 1896621 speakerFirst-6 speakerLast-6 desc.xxx

如果我需要在php端解析这个问题..(即:检查currentTopic == prevTopic)是否输出到屏幕之前..我可以这样做..只是不确定如何查询事物是按主题分组,......然后是speaker_last)

我试过这个:

SELECT * FROM ( 
    SELECT topic, speaker_first, speaker_last, title
    FROM vimeo_videos 
    ORDER BY speaker_last DESC
) AS tmp_table GROUP BY topic

但它似乎只为每个主题获取“1”条目..而不是每个主题下的所有条目。

这似乎让我得到了整个清单:

SELECT * FROM vimeo_videos order by topic, speaker_last;

我想我可以循环使用PHP并检查一个'新主题来创建我的'分组'?

(只是想确保没有更好/更有效的方法)

2 个答案:

答案 0 :(得分:0)

方法1:

你可以做的是先做:

SELECT topic FROM mytable GROUP BY topic

然后,您将获得所有不同的主题,并且每个主题都可以:

SELECT * FROM mytable WHERE topic = :mytopic

方法2:

使用带有自定义回调的usort函数在php中对它进行排序。

答案 1 :(得分:-1)

正如内森所说,你可以使用GROUP BY来获取唯一的主题,然后进行另一个查询来完成每个主题。

这是GROUP BY的SQL小提琴示例: http://sqlfiddle.com/#!9/193cd2/1

如果您想减少查询量,您应该按照自己的foreach语句和ORDER BY topic

进行操作并检查相关主题