2010-05-08 3 views
1

좋아, 내 문장은 phpMyAdmin에서 잘 실행되지만 PHP 페이지에서 어떻게 작동하는지는 알 수 없습니다. 내가 예를 들어 그룹의 최신 목록을 추출 할Select *, max (date)는 phpMyAdmin에서 작동하지만 내 코드에는 적용되지 않습니다.

CREATE TABLE `employee_groups` (
    `egid` int(10) unsigned NOT NULL, 
    `date` date NOT NULL, 
    `group_name` varchar(50) NOT NULL, 
    `limit` smallint(5) unsigned NOT NULL, 
    PRIMARY KEY (`egid`,`date`) 
) ENGINE=MyISAM DEFAULT CHARSET=cp1251; 

:

SELECT `egid`, `group_name` , `limit`, MAX(`date`) 
    FROM employee_groups 
GROUP BY `egid` 
ORDER BY `egid` DESC ; 

이 5 월 테이블 :

내 문이다 그룹이 변경된 경우 마지막 변경 만하고 싶습니다. 그리고 그것을 목록으로 필요로합니다 (모든 그룹).

+2

당신이 게시 할 수 있습니다

while($row = mysqli_fetch_row($result)) { echo htmlspecialchars($row['maxdate']); } 

희망 PHP에서 다른 콜 럼처럼 선택할 수 있습니다 사용중인 PHP 코드? – awgy

+0

"내가 어떻게 그것을 기대하지 않는다"당신은 무엇을 기대 했습니까? 당신은 무엇을 얻었습니까? –

답변

1

검색어가 깨 졌을 수 있습니다. 다음 두 조건 중 하나가 적용되지 않으면 그룹에 속하지 않은 필드를 선택하지 않아야합니다.

  • 집계 함수를 사용합니다.
  • 이 값은 기능별로 그룹화 된 열에 따라 다릅니다.

두 개의 필드 group_namelimit은이 규칙을 어기는 것으로 보입니다. 즉,이 열에 대해 불확정 결과가 발생합니다.

그룹 당 최대 값을 선택하려는 경우 약간 다른 기법을 사용해야합니다. 사용할 수있는 다양한 방법에 대해서는 QuassnoiMYSQL: Selecting records holding a groupwise maximum 문서를 참조하십시오.

SELECT di.* 
FROM (
     SELECT egid, MAX(date) AS date 
     FROM  employee_groups d 
     GROUP BY egid 
     ) dd 
JOIN employee_groups di 
ON  di.egid = dd.egid AND di.date = dd.date 
+0

마크를 다시 입력하십시오. 이것은 mysql이다. mysql에서 집계 함수를 사용하여 * out *을 사용하여 그룹 외부의 필드를 선택할 수 있습니다. 나는 이것이 표준 SQL과 대부분의 구현에서는 작동하지 않지만 _mysql_에서 작동한다는 것을 알고있다. (반환되는 실제 행은 정의되지 않았지만 대부분의 경우 첫 번째 행이다. 그러나 컴파일되고 작동하며 결과 집합을 반환한다!) – knittl

+0

위대한 작품! 고맙습니다. 나는 3 개의 다른 포럼에 나의 질문을 올렸지 만 아무도 나를 도울 수 없었다. 너는 현명한 사람이야, 마크. – kdobrev

+0

@kdobrev : 도와 줘서 기쁩니다. 문제가 해결되면 대답을 수락하는 것을 잊지 마십시오. 답변을 수락하면 여기 사람들이 더 많은 도움을받을 수 있습니다. :) –

0

집계 함수는 MySQL의에서 작동, SQL 표준에 다른 :

여기에 그것을 할 수있는 하나의 방법입니다. PHP에서 max(date)의 값에 액세스하기 위해, 당신은 그것을 별명을 가지고

SELECT `egid`, `group_name` , `limit`, MAX(`date`) as maxdate 
FROM … 

당신이 다음

+0

마크의 대답은 제가 찾고있는 것이 었습니다. 어쨌든 고마워. – kdobrev