2011-08-22 7 views
0

2, 4, 5, 6 및 8의 ID를 가진 mysql 데이터베이스에 5 개의 행이 있고 id 5를 echo하는 경우 어떻게 행 번호를 출력합니까? 물론 행 3일까요? 나는 데이터베이스의 시작부터 내가 쓴 행까지 모든 행을 세어 행 3을 얻는다.데이터베이스에서 행 수를 계산하고 원하는 행 번호를 반향 출력합니다.

+0

솔루션에 '계산'이 포함될 수 있음을 이미 알고있는 것으로 보입니다. 그럼 이미 뭘 해봤습니까? –

+1

이 행 번호를 일정하게 유지할 수는 없습니다. 'ORDER BY' 절이없는 SQL 쿼리는 어떤 순서도 보장하지 않습니다. – Crack

+0

나는 데이터베이스에있는 모든 행을 에코하는 코드 블록과 데이터베이스에있는 행의 수를 반향시킬 수있는 코드를 시도했다. –

답변

1

이 테이블에 일부 AUTO_INCREMENT 키를 추가하는 것입니다

SELECT @row_num:[email protected]_num+1 as row_number, id from table inner join (select @row_num:=0) as temp 

$pdo = new PDO(....); 
$result = $pdo->query($sql)->fetchAll(); 
foreach($result as $row) { 
    print_r($row); 
} 
+0

+1 또한 조인 오버 헤드를 피하려면 JOIN 대신 UNION을 사용하여 변수를 초기화하십시오. SELECT NULL AS row_num, NULL AS id 이중 WHERE (@row_num : = 0) UNION ...'WHERE는 * 불가능한 WHERE *를 생성하므로 행을 반환하지 않지만 변수를 초기화합니다. – Mike

+0

좋아, 나는 약 1 년 동안 PHP를 사용 해왔다. 그래서 나는이 같은 질의를 보지 못했다. 너는 그것을 정확히 되풀이한다고 어떻게 생각하니? –

+0

@Martin L :'@ row_num'은 [사용자 정의 변수] (http://dev.mysql.com/doc/refman/5.5/en/user-variables.html)입니다. 그것은 쿼리에서 동적 인 값을 생성하는데 편리합니다. SELECT @row_num : = @ row_num + 1 AS row_num'을 수행하면 실제 열과 마찬가지로 쿼리의 열 중 하나 인 row_num이 반환됩니다. – Mike

0

올바른 솔루션을 사용해보십시오, 각 행은 일련 번호를 할당 한 것입니다. 그렇지 않으면 ORDER BY 절이없는 SQL 쿼리가 임의 순서 (즉, ID는 임의의 순서로 반환 될 수 있음)가 보장되지 않으므로 각 ID에 대해 동일한 번호를 얻을 수 있다고 보장 할 수 없습니다.

그렇지 않으면 Andrej L의 솔루션이 올바른 것입니다.

+0

데이터베이스를 처음 만들 때 ID 열을 auto_increment로 만들었습니다. –

+0

달성하고자하는 것에 대한 더 나은 설명이 도움이 될 것입니다. 현재 당신이 필요로하는 계산을하는 진짜 이유는 없습니다. – Crack

0

사용하기 전에 정렬 순서대로 이보다 몇 줄 앞의 행을 계산할 수 없습니까? ID 2와 3 만 행이 계산됩니다이 경우

COUNT(*) FROM table WHERE id < ? 

, 당신은 1부터 시작하는 인덱스를 사용하는 경우 결과는 2. 그래서, 그 하나를 추가하고 당신이 답을 가지고있다.

+0

나는 이것을 줄 것이고 그 일이 벌어지고 있음을 알려줄 것이다. –

관련 문제