2009-07-04 6 views
1

위키 피 디아 here에서 위키피디아 기사를 무작위로 관리하는 펄 스크립트를 발견했습니다. 코드가 약간 컴퓨터 생성 된 것 같습니다. MySQL에 대한 현재의 관심으로 인해 데이터베이스에 링크 및 관련 데이터가있을 수 있다고 생각했습니다.위키 피 디아에서 MySQL과 Perl로 무작위로 페이지를 만들 수 있습니까?

MySQL은 테이블 간의 관계를 유지하는 데 좋다는 것을 알고 있지만 Perl로 쉽게 구현할 수 있습니다. 그들의 전문 분야에 선을 그 어딘지 모르게 느낀다. 따라서 :

위키 백과 의 기사를 MySQL과 Perl로 랜덤화할 수 있습니까?

답변

2

에 연결할 수 :

http://svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/includes/specials/SpecialRandompage.php

그것은 결국 오픈 소스 소프트웨어입니다), 그리고 그것의 아름다움입니다.

편집 : 코드를 간단히 살펴 보니 행 생성 시간에 설정된 page_random이라는 필드를 사용하고 있다고 확신합니다. 그런 다음 인덱싱 된 필드이므로 제한 1을 사용하여 순서를 지정하면 즉석에서 (이 응용 프로그램에 유효한 임의의 오프셋을 사용하여) 물론 가능합니다.

다른 답변에서 언급했듯이 ORDER BY RAND()가 매우 느리기 때문에 랜덤 액세스를 빠르게하는 매우 표준적인 방법입니다.

편집 # 2 : OOP Wiki Media의 코드가 얼마나 깨끗하고 적절한 지 알고 있습니다. 확실히 좋은 PHP 코드가 어떻게 보이는지 (그리고 나 자신을 생각 나게하는) PHP 초보자를 표시하기 위해 그것을 북마크한다.

+0

+1 귀하의 개인적인 관점. –

+1

저는 개인적으로 PHP 코드, 특히 중괄호가 없다는 것에 실망합니다. 파이썬이 아니기 때문에 변명의 여지가 없습니다. –

+1

아, 어리석은 짓입니다. 작고 매우 구체적인 방법으로 나누어 진 작은 클래스입니다. LOC 카운트를 줄이려고하는 것과는 다릅니다. 필자는 개인적으로 모든 부분에서 중괄호를 사용하지만 중괄호 나 두 개를 건너 뛰는 명확하고 간결한 코드는 신경 쓰지 않습니다. –

1
SELECT id FROM articles ORDER BY RAND() LIMIT 1 

당신은 물론 당신이 정말 그들이 (위키 백과) 그것을 할 방법을 알고 싶어요 직접 미디어 위키에서이 코드를 살펴있는 경우 http://en.wikipedia.org/wiki/Special:Random

+0

ceejayoz : 예,하지만 임의로 지정할 페이지를 결정하고 싶습니다. 몇 가지 하위 카테고리가 될 수 있습니다. 그래서 적어도 DB에 저장해야합니다. –

+2

같은 것을 올릴 예정이었습니다. 그러나 ORDER BY RAND() 쿼리는 문제의 규모 때문에 여기에서 작동하지 않습니다. ORDER BY RAND()는 먼저 모든 항목을 가져 와서 순서를 지정한 다음 LIMIT 만 적용하므로 Wikipedia에서는 느리게 처리됩니다. –

+0

@Artem : 좋은 지적입니다! –

관련 문제