2014-11-18 3 views
0

테이블의 행 계산에 문제가 있습니다. 내가 $total_records 에코 때 나는 변수 및 데이터베이스 정보는 것을 완전히 확신 결과는 그냥 21를 기대하고있어 1MySQL에서 행 계산하기

이며, question_id 그러나 $id. 같은 곳에 얼마나 많은 행을 계산하려면 옳은. 아무도 내가 뭘 잘못 설명 할 수 있을까?

$sqlwow="SELECT COUNT(a_id) 
     FROM forum_answer 
     WHERE question_id='$id' 
     ORDER BY a_id DESC"; 
$rsresult = $mysqli->query($sqlwow); 
$row=$rsresult->fetch_assoc(); 
$total_records = count($row); 
echo $total_records; 
+0

'for '앞에'echo $ total_pages;'를 추가하고'$ total_pages'의 값이 무엇인지 확인하십시오. – ekad

+0

그것은 0을 표시합니다. 그래서 $ total_pages를 얻는 것이 잘못된 것입니까? – watercolour

+0

'$ total_records = @ $ row [0];을'$ total_records = count ($ row);로 변경하면 어떻게 되나요? – ekad

답변

2
$sqlwow="SELECT COUNT(*) 
     FROM forum_answer 
     WHERE question_id='$id' 
     ORDER BY a_id DESC"; 
$rsresult = $mysqli->query($sqlwow); 
$row = $rsresult->fetch_row(); 
$total_records = $row[0]; 
:

$sqlwow="SELECT COUNT(a_id) as num_records 
      FROM forum_answer 
      WHERE question_id='$id' 
      ORDER BY a_id DESC"; 

그런 다음으로 반향

보유한 모든 항목이 하나의 열일 때 연관 결과로 가져 오면 안됩니다. PDO에는 실제로 첫 번째 열을 가져 오는 fetchColumn을 사용하는 단축키가 있습니다. MySQLi는이 단축키를 갖고 있지 않으므로 숫자 배열로 전체 행을 가져올 수 있고 그 배열 (첫 번째 열)에서 첫 번째 결과를 반환합니다.

count(*) 또는 count(1)도 사용해야합니다. 열 이름 사용은 리턴되는 행 수를 점검하지 않으므로 속도가 떨어지지 만, 해당 열의 널 (null)이 아닌 값이 얼마나 많이 리턴되는지를 점검합니다. 대부분의 경우, 이것이 동일합니다. 특히 해당 열이 기본 키인 경우. @fthiella의 설명에 감사드립니다.

+0

COUNT (*)는 행을 계산하지만 COUNT (a_id)는 a_id가 null이 아닌 모든 행을 계산하므로 실제로 결과에 영향을 미치지 만 OP의 의도에 따라 달라집니다 – fthiella

+0

@fthiella, 설명해 주셔서 감사합니다 . 질문의 표현에서 이것은 OP 의도가 아니므로'a_id'가 기본 키이고 그 경우 null이 될 수 없다면'count (*)'가 더 정확할 수도 있습니다. – Devon

+1

@fthiella. 나는 그 기능에 대한보다 명확한 설명을 포함하도록 대답을 업데이트했다. – Devon

1

count($row)은 항상 당신은 SQL 문에 수를 별칭을 할 필요가 1.있을 것입니다 :

$total_records = $row['num_records'];

echo $total_records;

+0

별칭을 사용할 필요가 없습니다. 별칭은'fetch_assoc()'호출 때문에 유용합니다. 단 하나의 컬럼이 있기 때문에,'current ($ row)'는 앨리어스가 없거나'fetch_row()'를 사용하고 쿼리에'$ row [0]'을 사용하면 정상적으로 동작해야합니다. 이것은 "별칭 필요"를 기반으로 한 주석입니다. – Devon