我正在为我的网站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 ....
结果的顺序无关紧要,查询必须快速。我喜欢自己尝试一下,但这对我来说有点太多了。
我不知道关键是否适合这项工作,有人可以提供一些建议吗?
答案 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
}
?>
[未测试!]