2013-07-22 9 views
0

MySQL 데이터베이스에서 데이터를 검색하는 PHP 응용 프로그램이 있습니다. PHP가 DB를 쿼리하면 결과가 추출되고 모든 출력 행이 화면에 인쇄되지만 상단에는 출력 행을 시각화하는 그래프가 인쇄됩니다. 다음과 같이 (이것은 24 개의 세로 막 대형 차트입니다. MySQL이 PHP를 대신하여 실행되는 쿼리로부터 24 개의 행을 생성했기 때문입니다.) 사용자가 결과를 많이 생성하는 쿼리를 실행하는 경우MySQL 쿼리 결과 통합

24 rows of MySQL output

내가 직면 문제가 발생합니다. 두 번째 그림은 PHP 응용 프로그램에서 MySQL이 조회 할 때 생성 된 150 개의 결과를 시각적으로 보여줍니다. 나는 수직선의 최대 숫자를 원한다. (예를 들어, 50을 말한다). 쿼리가 50 개 이상의 행을 생성 할 때 우리는 시각화를 위해 MySQL 결과를 단 50 개의 행으로 통합합니다. 그래프 아래에 모든 행을 인쇄 할 것이므로 원하는 경우 사용자가 원하는 결과를 볼 수 있습니다. 내 질문은 CPU 사이클과 관련하여 코드를 이해하고 따르기가 어렵지 않게이 작업을 수행하는 최적의 방법은 무엇입니까? 내가 있었다

150 rows of MySQL output

하나 개의 아이디어가 (다시, 쉽게 숫자를 가정 할 수 있습니다 단순히 (50)에 의해 MySQL의 출력 행의 수를 나누는 PHP 응용 프로그램에서이 문제를 해결하는 것입니다, 반올림은 간단한 문제입니다 이 인스턴스에서 작업 할 수 있습니다). MySQL이 500 개의 행을 생성하면 500을 50으로 나눈 값이 10이므로 10 번째 줄마다 가로 막 대형 차트에 세로선을 그립니다.

또 다른 아이디어는 MySQL에서이 문제를 해결하는 것입니다. 아마도 MySQL 쿼리를 실행 한 다음 결과를 변수에 복사 한 다음 매 10 번째 행을 선택하는 쿼리에 대해 두 번째 쿼리를 실행하거나 MySQL 내에서 통합 할 수있는 방법이있는 경우 두 번째 작은 데이터 집합을 표시 할 수 있습니다 PHP로.

이 문제를 해결할 수있는 최고의 장소는 어디일까요?

업데이트 : 조금 더 설명하도록 요청으로

는, 그것 정말 아주 기본적인 시나리오 :

결과는 아래 looklike, 각 행의 정수 값과 타임 스탬프 (바있다 차트는 시간 [X 축] 동안 값 [Y 축])을 표시합니다. MySQL이 출력 (150 개) 행을 생성하면

row | value | timestamp 
1 | 10 | 1234-01-01 10:30 
2 | 10 | 1234-01-01 10:35 
3 | 15 | 1234-01-01 10:40 
4 | 15 | 1234-01-01 10:45 
5 | 10 | 1234-01-01 10:50 

우리는 상술 한 제 2의 그래프와 같은 결과를 얻는다. 쿼리가 300 개의 결과 또는 예제를 생성하는 경우 막 대형 차트의 선은 너무 얇기 때문에 보이지 않지만 보이지는 않기 때문에 통합 기능을 만들려고합니다. 그것은 불필요한 수준의 시각적 세분화가됩니다.

+0

여기에 게시 할 수있는 샘플 코드/쿼리가 있습니까? 당신의 논리에 대한 아이디어를주는 것은 무엇입니까? – Maximus2012

+0

@ Maximus2012 요청한대로 질문을 업데이트했습니다. – jwbensley

+0

을 요청한 곳에서 그래프 중 하나를 생성하는 쿼리가 무엇이 되었길 희망합니까? – Maximus2012

답변

0

SQL을 작동시키는 것보다 PHP 애플리케이션에서이 문제를 직접 해결했습니다.

응용 프로그램에서 모든 MySQL 결과 행을 포함하는 배열이 있습니다. PHP는 각 배열 항목을 반복하고 막대 그래프에 수직 막대로 표시하기 위해 Javascript를 반향합니다.

해당 루프를 삽입하기 전에이 코드를 삽입하면 간단하고 충분한 방법으로 문제를 해결할 수 있습니다.

$maxbars = 50; 
if(count($array_mysql_resutls)>$maxbars) { 
    $devision = count($array_mysql_resutls)/$maxbars; 
    $resultsarray = Array(); 
    for($i = 0; $i < $maxbars; $i++) { 
     $resultsarray[$i] = $array_mysql_resutls[ceil($devision*$i)]; 
    } 
    $graph_traces = $resultsarray; 
} 

는 가장 중요한 것은, 우리는 심지어 설정 결과에 분산에 대한 분할 그림 ( ceil())를 반올림합니다.