Получить N строк группы / темы / темы - PullRequest
3 голосов
/ 10 мая 2011

Я ищу правильный запрос 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 ....

Порядок результата не имеет значения, и запрос должен быть быстрым. Мне нравится самому пробовать, но для меня это слишком много.

Я не знаю, используются ли ключи для этой работы, может кто-нибудь дать совет?

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Это непросто, потому что, хотя есть способы сказать «получите мне только 13 записей для этого запроса», насколько я знаю, нет никакого способа прямо сказать «получите мне только 13 записей для этого каждого значения поля x» ».

Единственный способ сделать это - добавить поле «номер игры» к записи или создать другую таблицу для хранения этого номера, если вы не можете или не хотите изменить «песню». играл "запись. Затем, когда записи добавляются в таблицу, присвойте каждому следующий доступный номер для этой радиостанции. (На самом деле MySQL имеет функцию, которая делает это автоматически.) Тогда ваш запрос может искать этот индекс <= 13, или, если записи могут быть удалены, есть внутренний запрос, который делает «выбрать станцию, max (play) как группу maxplay станция ", тогда внешний запрос может выбрать" где играть> 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 = данный-префикс. Это полезно, когда вы хотите поместить данные в упорядоченные группы. " (Честно говоря, с тех пор, как я использовал это, прошло много времени, поэтому я не могу предоставить много деталей.)

0 голосов
/ 10 мая 2011

Допустимо ли циклически просматривать список радиостанций (их всего 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
}
?>

[не проверено!]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...