2010-12-09 2 views
0

이 사이트는 전자 상거래 사이트와 비슷하며 두 테이블이 있습니다.합류 한 다른 테이블에 많은 레코드가있는 경우 하나의 레코드가있는 테이블 레코드를 표시하는 방법

tbl_products 
--------------- 
phash 
product 
price 
desc 
maxcount 


tbl_product_images 
------------------- 
phash 
thumb 
large 

tbl_products은 제품 정보를 저장 tbl_product_images 엄지와 EAC 제품의 큰 이미지의 경로를 기억한다.

phash는 제품 이름의 md5입니다. 그 제품을 일치시킬 때 ID 또는 제품 이름 대신 사용합니다.

나는 tbl_products가 제품에 대한 하나의 레코드를 가지고 있고 그 제품과 관련하여 tbl_product_images 에 5 개의 행이 있다고 말합니다.

어떻게하면 쿼리를 실행할 수 있습니까?

$sql = "select 
    tbl_products.phash 
    tbl_products.product 
    tbl_products.price 
    tbl_products.desc 
    tbl_products.maxcount 
    tbl_product_images.phash 
    tbl_product_images.thumb 
    tbl_product_images.large 
    from tbl_products 
    inner join tbl_product_images 
    on tbl_products.phash = tbl_products_images.phash"; 

tbl_product_images에는 5 개의 레코드가 있기 때문에 5 행의 레코드가 표시됩니다.

방식 I 출력 내가 당신이 내가 알려 주시기 바랍니다 설명하기 위해 노력하고있어 더 많은 설명을 필요로하는 경우,이 작업을 수행하는거야 방법을 정말 확실하지 오전 내 전통적인 방법

$query = $db->query("$sql"); 
while($row = $db->fetch($query)) 
{ 
.... 

} 

입니다.

select 
    tbl_products.phash 
    tbl_products.product 
    tbl_products.price 
    tbl_products.desc 
    tbl_products.maxcount 
    tbl_product_images.phash 
    tbl_product_images.thumb 
    tbl_product_images.large 
    from tbl_products 
    inner join (SELECT * FROM tbl_product_images LIMIT 1) images 
    on tbl_products.phash = images.phash 

당신은 추가 할 수 있습니다 : 당신이 각 제품에 대해 반환되는 이미지를 상관하지 않는 경우 그에만 해당 비록 - 감사합니다

+0

출력을 위해 무엇을 기대합니까? TBL_PRODUCT_IMAGES에서 복제본을 얻고 있습니다 –

답변

0

가장 간단한 방법은 이미지 테이블에서 오는 결과의 수를 제한하는 것입니다 ORDER BY [col] DESC를 사용하여 이미지 테이블에 다른 열 (예 : 날짜)이있는 경우 LIMITed 쿼리를 사용하여 어떤 이미지가 나타날지 결정할 수 있습니다.

(참고 : 반환 할 이미지를 결정 tbl_product_images에 약간의 열이이 있다면, 당신은 쿼리에 WHERE 절에 그것을 넣어 수 중 하나, 또는 그와 같은 조인 조건에 포함 : ON tbl_products.phash = tbl_product_images.phash AND tbl_product_images.color = 'Blue')

이고 모든 이미지가 포함 된 제품을 가져오고 결과 세트에 한 행만 있으면 이미지 집합을 열로 "피벗 (pivot)"할 수 있습니다. 그러나 제품 당 임의의 (또는 단순히 큰) 이미지 수를 가질 수있는 경우 까다 롭습니다. 제품 당 여러 행을 반환하고 응용 프로그램 코드에서 결과를 처리하는 것이 더 좋을 수도 있습니다 ...

+0

또한 호기심에서 벗어나 : 왜 제품 ID 대신 외래 키로 MD5 해시를 사용하고 있습니까? –

+0

계속 지켜봐 주시기 바랍니다. 설명 드리겠습니다. 나는 누군가를 떨어 뜨려야 해. 이드보다 해시를하는 것이 훨씬 낫다. –

+1

나는 격렬한 호흡으로 기다린다. :) –

관련 문제