获取N行的组/线程/主题

时间:2011-05-10 15:45:42

标签: php mysql sql database

我正在为我的网站http://watiseropderadio.nl(荷兰语)寻找合适的mysql查询。这是一个网站,可以找出荷兰流行电台播放的歌曲。

我想查询每个无线电台的返回13行。有8种不同的无线电台。

这是我的表:

id       | radioname       | time  | artist    | song
--------------------------------------------------------------
23421    | radio 538       | 19:34 | Queen     | Bohemian
23422    | radio veronica  | 19:35 | Rammstein | Blablabla
23423    | slam fm         | 19:34 | Roxette   | Blablabla
23424    | 3fm             | 19:34 | Blabla    | Blablabla
....

这是一张包含3,000,000多条记录并且带有这些密钥的表格:

PRIMARY             PRIMARY  3083007   id
radioname           INDEX    8         radioname
track with artist   INDEX    23715     artist
                                       song

这就是我想要的输出:

id       | radioname       | time  | artist    | song
--------------------------------------------------------------
23455    | radio 538       | 19:30 | Blabla    | Blablabla
23470    | radio 538       | 19:33 | Blabla    | Blablabla
23484    | radio 538       | 19:36 | Blabla    | Blablabla
23498    | radio 538       | 19:38 | Blabla    | Blablabla
total 13 x ....
23456    | radio veronica  | 19:29 | Blabla    | Blablabla
23476    | radio veronica  | 19:32 | Blabla    | Blablabla
23483    | radio veronica  | 19:36 | Blabla    | Blablabla
23495    | radio veronica  | 19:39 | Blabla    | Blablabla
total 13 x ....

结果的顺序无关紧要,查询必须快速。我喜欢自己尝试一下,但这对我来说有点太多了。

我不知道关键是否适合这项工作,有人可以提供一些建议吗?

2 个答案:

答案 0 :(得分:1)

这很棘手,因为虽然有很多方法可以说“只为我的查询提供13条记录”,但据我所知,没有办法直接说“为每个字段x的每个值只获取13条记录” ”

我能想到的唯一方法是在记录中添加“游戏编号”字段,或者如果您不能或不想更改“歌曲”,则创建另一个表来保存此编号打了“记录。然后,当记录添加到表格中时,为每个广播电台提供下一个可用号码。 (实际上MySQL有一个自动执行此操作的功能。)然后您的查询可以查找此索引< = 13,或者如果可以删除记录,则具有执行“select station,max(play)as maxplay group”的内部查询按“站”,然后外部查询可以选择“where play> maxplay-13”

<强>更新

要设置MySQL自动增量,请参阅http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html。请特别注意围绕句子的讨论,“对于MyISAM和BDB表,您可以在多列索引中的辅助列上指定AUTO_INCREMENT。在这种情况下,AUTO_INCREMENT列的生成值计算为MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。当你想把数据放入有序的组时,这很有用。“ (坦率地说,自从我使用它以来已经有一段时间了,所以我无法提供很多细节。)

答案 1 :(得分:0)

循环播放无线电台列表是否可以接受(因为只有8个)并触发了8个单独的查询?像

这样的东西
<?php
$stations = array('radio 538', 'radio veronica', 'slam fm', '3fm');
foreach ($stations as $station)
{
    $query = sprintf('SELECT * FROM table WHERE radioname="%s" ORDER BY time ASC LIMIT 0,13', $station);
    // do something
}
?>

[未测试!]