2017-02-25 1 views
0

webshop 레이아웃을 생성하는 PHP 파일이 있습니다. 제품을 페이지로 분할하기 시작한 것이 문제입니다. 나는 모든 종류의 제품을 찾을 수있는 제품 데이터베이스에서 실행되는 다음 쿼리를 가지고 있습니다. 어떤 메뉴 아래에 표시해야 하는지를 지정하는 prodducttype 열이 있습니다. 쿼리한도가 적은 MySql 쿼리가

항상 내가 그 다음 그냥 실행하기 전에 쿼리를 표시하는 에코 사용 누락 한 행이
$sql = "SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
producttype = '".$GLOBALS["useableproductid"]."' LIMIT ".($start- 1).",".$stop; 

: 현재 3 종류의 : 데이터베이스에 대한

SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
producttype = 'laptop' LIMIT 0,8 

간단히 제품 랩탑, 헤드폰, 데스크탑. 랩톱을 표시 할 때 ID 1- 17 및 ID = 1에서 누락되었습니다. ID 18-22 및 ID 21의 헤드폰이 없습니다. ID 23-27 및 ID 23의 데스크톱이 없습니다. 항상 동일한 제품이 없습니다.

표시 용 방법은 다음과 같습니다

while($row = $result->fetch_assoc()){ 
echo $row["nm"]; //just an example echo in the code it gets displayed with design 
    ... 
} 

이 모든 해답을 주셔서 감사합니다!

+2

ORDER BY가없는 LIMIT는 상당히 의미가 없으며 c1640644와 같은 이름을 가진 테이블은 종종 열악한 디자인의 증상을 나타냅니다. – Strawberry

+0

감사합니다. c1640644는 학생 서버 번호 인 c1640644가있는 대학 서버이기 때문입니다. –

+0

아, 그럼 충분히 – Strawberry

답변

1

관찰 된 동작 ('laptop'의 "누락 된 행"및 'headphone'의 "누락 된"행)에 대한 가장 합리적인 설명은 행이 제품 유형과 동일한 비교 인 조건부를 만족하지 않는다는 것입니다. (이 반환되고 미만 $stop-$start 행이 가정합니다.

내가 producttype의 값을 확인하는 것입니다.

SELECT producttype, COUNT(1) 
    FROM c1640644.products 
GROUP BY producttype 
ORDER BY producttype 

이 카운트에서? 당신이 반환 될 것으로 예상 행의 수만큼 반환 특히, 나는 "노트북"을 시각적으로 가까운 값을보고 싶지만, 같은 'laptop ultra-portable', 또는 'lapt0p' 등의 평등 일치를 만족하지 않을 것입니다. 그 값은 'laptop'에 동등 비교를 만족하지 않을 것입니다.


,536,

ORDER BY 절이 없으면 MySQL은 임의의 순서로 행을 반환 할 수 있습니다. LIMIT 절을 사용한 쿼리의 결과는 불확정합니다. LIMIT 0,8LIMIT 8,16의 검색어에 동일한 행이 포함될 수 있습니다. 행이 "생략"될 수도 있습니다.

"한 행 누락"이 항상있는 경우에는 while 루프 전에 가져 오기가있는 것 같습니다. 질문에 표시된 루프가 올바르게 보입니다. nm 열에 빈 문자열이 포함될 수도 있으며 행이 건너 뛴 것처럼 보이게 할 수 있습니다. 디버깅을 위해서는 루프 내부의 첫 번째 줄에 echo "row fetched";을 포함시키는 것이 좋습니다. 또는 루프 $i=0; 앞에 카운터 변수를 초기화 한 다음 루프 내부에서 $i을 증가시키고 디버그 출력에 문자열에 $i을 포함시킵니다.