2011-05-10 3 views
3

내 웹 사이트에 대한 올바른 mysql 쿼리를 찾고 있습니다 http://watiseropderadio.nl (네덜란드어). 네덜란드의 유명한 라디오에서 어떤 곡이 연주되었는지 알아 보는 웹 사이트입니다.그룹/스레드/주제의 N 행 가져 오기

나는 각 방사조에 대해 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 개 백만 레코드와있는 테이블입니다 :

내 테이블

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 .... 
:

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

내가 출력하고 싶은이

결과의 순서는 중요하지 않으며 쿼리가 빨라야합니다. 나는 그것을 직접 해보고 싶지만, 이것은 나를 위해 조금 있습니다.

키가이 작업에 사용되는지 알 수 없지만 누군가가 조언을 해줄 수 있습니까?

+1

질문에서 : 나는 라디오 방송국 대신의 전체 이름을 저장 때마다 숫자 ID를 사용하십시오. – abaumg

+0

@abaumg 나는 그것을 할 것이다, 고마워. 많은 시간을 절약 할 수 있을까요? 지난 2 시간의 레코드를로드하는 데 걸리는 시간은 3 (!) 초입니다. – harianus

+0

나는 MySQL 전문가가 아니며 얼마만큼 시간을 절약할지 모르지만 시간이 절약 될 것입니다. 그리고 좋은 데이터베이스 설계입니다. – abaumg

답변

1

"이 쿼리에 대해 13 개 레코드 만 얻으십시오"라고 말하는 방법이 있지만 내 지식에 따르면 "이 필드 값마다 13 레코드 만 가져올 수는 없습니다. 엑스".

내가 할 수있는 유일한 방법은 레코드에 "재생 번호"필드를 추가하거나이 번호를 저장할 다른 테이블을 만드는 것입니다. 변경할 수 없거나 " 노래 연주 "기록. 그런 다음 레코드가 테이블에 추가되면 해당 라디오 스테이션에 대해 사용 가능한 다음 번호를 각각 제공하십시오. (사실 MySQL에는이 기능을 자동으로 수행하는 기능이 있습니다.) 그런 다음 쿼리는이 인덱스 < = 13을 찾거나 레코드를 삭제할 수 있습니다. "스테이션 선택, 최대 (재생) as maxplay group" 역 "을 선택한 후 외부 쿼리가 선택할 수 있습니다"여기서 플레이> 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. 데이터를 정렬 된 그룹에 넣을 때 유용합니다. " (솔직히, 내가 이것을 사용했기 때문에 이것을 사용했기 때문에 많은 세부 사항을 제공하지 못했다.)

+0

그 소리가 분명합니다. 이 함수를 설명 할 수 있습니까? 실제로 MySQL에는 자동으로이 기능이 있습니다. – harianus

+0

아니면'UPDATE 테이블에 의해 SET lastplay = lastplay - 1 어디 radioname = '라디오 538'및 lastplay> 0'? – harianus

+0

@harianus : 업데이트를 참조하십시오. "접두어 내에서 자 동 번호"기능이없는 MySQL 이외의 데이터베이스를 사용하는 경우 시퀀스 번호를 지정하는 코드를 작성하거나 각 레코드를 삽입 할 때 코드를 할당 할 것입니다. 재생리스트에서 (어떤 것이 든 ..., 재생 번호) 값을 삽입 할 수 있습니다. (뭐든지 ... (최대 (playnumber), 0) +1을 재생 목록에서 선택하십시오. radioname = <새로운 라디오 네임>)) – Jay

0

라디오 방송국 목록을 반복하여 쿼리?

<?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 
} 
?> 

같은 뭔가 [안된!] 외에도

+0

괜찮 으면 좋겠지 만, 나는 mysql 솔루션을 원했다. 그러나 지금 나는 그것이 없다는 것을 안다, 이것은 트릭을 할 것이다. – harianus