2011-09-07 2 views
0

내가 다음 필드가있는 테이블이 있습니다PHP에서 특정 값과 일치하는 가장 최근 레코드가 여러 개 검색되도록 mySQL 데이터베이스에 요청하려면 어떻게해야합니까?

candy_name 
candy_type 
candy_amount 
candy_vendor 

한 candy_type는 "gummis"와 같은 여러 candy_names을 가질 수 등등 "오렌지", "수박", "신 수박,"하고있을 수 있습니다.

내가하고있는 일은 공급 업체별로이 테이블을 검색 한 다음 각 고유 한 candy_type (candy_name 무시)에 대한 가장 최근 항목을보고 싶습니다. 즉, 각 고유 한 candy_type에 대해 가장 최근에 추가 된 행입니다.

그래서 나는 그 테이블의 모든 고유 candy_types을 찾는 것에 대해 일부 작업을 수행하는 방법을 발견 :
$sql = "SELECT DISTINCT candy_type FROM candy_table 
       WHERE candy_vendor LIKE '%$user_searchbox_input%' 
       ORDER BY candy_vendor ASC"; 
$result=mysql_query($sql); 

가 지금은 각각의 고유 한 candy_type에 대한 가장 최근의 기록을 검색하는 방법을 찾을 필요가있다.

"gummi"의 candy_type과 마찬가지로 해당 유형과 일치하는 마지막 레코드가 "주황색"이었으면 그 것을보고 싶습니다. 다른 것들은 그렇지 않습니다.
"초콜릿"의 candy_type에 대해 마지막 일치하는 레코드가 "우유"인 경우 다른 것에 대해서는 신경 쓰지 않지만 그 candy_type과 일치하는 가장 최근의 레코드를 검색하려고합니다.

어떻게하면됩니까?

+0

"가장 최근"을 어떻게 정의합니까? 마지막으로 추가 된 것이거나 마지막으로 업데이트 한 것입니까? 아니면 마지막에 액세스 한 사람입니까? 당신의 테이블 구조는 무엇입니까? 당신은 충분한 정보를 제공하지 않는 것 같습니다. –

+0

@Aleks, 많은 정보가 필요하지는 않지만 Jerry는 코드를 변경하기 만하면됩니다. 가장 최근의 ='having timestamp = max (timestamp)'모든 OP는 자신의 DB 스키마에 맞게 필드의 이름을 변경해야합니다. – Johan

+0

@Aleks, 마지막에 추가 된 것. 오해의 소지가 있다고 생각되지 않았습니다. 원래 게시물을 바꿀 것입니다. 감사! –

답변

1

가장 최근의 경우 having 절을 group by과 결합하여 그룹 별이 이미 다른 열을 선택했기 때문에 distinct 절을 삭제할 수 있습니다.

$user_searchbox_input = mysql_real_escape_string($user_searchbox_input); 
$sql = "SELECT candy_type FROM candy_table 
       WHERE candy_vendor LIKE '%$user_searchbox_input%' 
       GROUP BY candy_vendor 
       HAVING timeadded = MAX(timeadded) 
       ORDER BY candy_vendor ASC"; 
$result=mysql_query($sql); 

참조 : http://www.techonthenet.com/sql/having.php

+0

candy_date 필드가 있습니다 ... 사용해야합니까? 아니면 "timeadded"PHP/MYSQL에 대해 모르겠습니다. –

+0

@ Jerry, good,'timeadded' 필드 대신'timeadded'는 단지 발명품입니다. 나는 그것이 붙잡는다면 그것을 특허 수 있습니다. – Johan

+0

나는 이것이 효과가있을 것이라고 생각한다; HAVING 절의 경우 "candy_date에 가장 큰 값을 선택하십시오"라고 어떻게 말합니까? –

0

불행하게도, 그 4 열에서하는 기록 가장 최근의 이야기의 방법이 없습니다.

ALTER TABLE 명령을 통해 date_time 열을 추가하는 것이 좋습니다. 필요한 경우 구문 도움말은 http://dev.mysql.com/doc/refman/5.1/en/alter-table.html을 참조 할 수 있습니다.

이것은 현재 검색어에 도움이되지 않지만 이후 검색어에 도움이됩니다.

+0

나는 time_column을 가지고 있지만 필요한지 확실하지 않거나 데이터베이스의 가장 최근 행을 확인할 수 있는지 여부는 확실하지 않았습니다. 유용한 데이터로 이미 채워진 열이 이미 있다는 것을 알고 있다면 지금 무엇을해야합니까? –

+0

시간 열이 있고 레코드 삽입 날짜/시간이 있으면 다음을 수행합니다. " FROM candy_table ORDER BY DESC LIMIT 1". – Cavachon

+0

PK가 정수 auto_increment 인 경우 작성 시간이 꽤 좋은 벡터이므로 시간 소인 필드가 필요하지 않습니다. – Johan

-1

create_date (ORDER BY) 또는 생성 타임 스탬프가 무엇이든간에 데이터를 정렬 한 다음 SELECT * FROM tbl LIMIT 1; # 첫 번째 행 가져 오기

+0

-1, 심지어 닫히지 않습니다. – Johan

관련 문제