我正在寻找一个正确的mysql查询我的网站http://watiseropderadio.nl (荷兰语)。这是一个网站,用来了解荷兰流行电台播放了哪些歌曲。
我想对每个无线电台执行一个返回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 ....结果的顺序并不重要,查询必须很快。我喜欢自己尝试,但这对我来说有点太多了。
我不知道钥匙是不是适合这份工作,有人能给点建议吗?
发布于 2011-05-11 00:26:03
这很棘手,因为虽然有方法可以说“为这个查询只获取13条记录”,但就我所知,没有办法直接说“对于字段x的每个值,只为我获取13条记录”。
我能想到的唯一方法是在记录中添加一个“播放编号”字段,或者如果您不能或不想更改“播放的歌曲”记录,则创建另一个表来保存此编号。然后,当记录添加到表中时,为每个记录提供该电台的下一个可用编号。(实际上,MySQL有一个自动执行此操作的功能。)那么您的查询可以查找这个索引<=13,或者如果可以删除记录,那么内部查询执行"select station,max(play) as maxplay group by station",那么外部查询可以选择"where play>maxplay-13“。
更新
要设置MySQL自动递增,请参阅http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html。请特别注意围绕以下句子的讨论:“对于MyISAM和BDB表,您可以在多列索引中的辅助列上指定前缀。在这种情况下,为AUTO_INCREMENT列生成的值的计算公式为MAX(auto_increment_column) +1 WHERE prefix=给定前缀。这在您希望将数据放入有序组时非常有用。”(坦率地说,我使用这个已经有一段时间了,所以我不能提供太多细节。)
发布于 2011-05-11 01:26:41
遍历广播电台列表(因为只有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
}
?>未经测试!
https://stackoverflow.com/questions/5952776
复制相似问题