PHP를 사용하는 Oracle에서 선택된 행 수 계산
저는 대학을 위해 이 프로젝트를 하고 있습니다. 기본적으로 영화 데이터베이스이고 몇 개의 질문을 위해 몇 개의 행이 선택되었는지 알아야 합니다.현재로서는 다음과 같은 두 가지 상황이 필요합니다.
- 단일 동영상 정보를 표시합니다.데이터베이스에 사용자가 선택한 동영상이 포함되어 있는지 여부를 확인하기 위해 선택한 행의 개수를 확인합니다.아니면 이것에 대한 더 나은 해결책이 있습니까?
- 그 선택된 영화는 장르가 있는데, 몇 개인지 알아야 장르를 구분하여 스트링을 구성할 수 있습니다.
|
문자열 끝에 하나를 추가하지 않고.
MySQL을 사용하면 데이터베이스를 쿼리하고 사용하기만 하면 됩니다.mysql_num_rows()
그렇지만oci_num_rows()
SELECT 문에 대해 동일하게 작동하지 않습니다.
OCI/PHP에서 찾은 유일한 솔루션은 다음과 같습니다.
if(is_numeric($mid) && $mid > 0) {
$stid = oci_parse($db,
'SELECT COUNT(*) AS NUM_ROWS
FROM movies
WHERE mid = '.$mid
);
oci_define_by_name($stid, 'NUM_ROWS', $num_rows);
oci_execute($stid);
oci_fetch($stid);
if($num_rows > 0) {
$stid = oci_parse($db,
'SELECT title, year, synopsis, poster_url
FROM movies
WHERE mid = '.$mid
);
oci_execute($stid);
$info = oci_fetch_assoc($stid);
$stid = oci_parse($db,
'SELECT COUNT(*) AS NUM_ROWS
FROM genres g, movies_genres mg
WHERE mg.mid = '.$mid.' AND g.gid = mg.gid'
);
oci_define_by_name($stid, 'NUM_ROWS', $num_rows);
oci_execute($stid);
oci_fetch($stid);
$stid = oci_parse($db,
'SELECT g.name AS genre
FROM genres g, movies_genres mg
WHERE mg.mid = '.$mid.' AND g.gid = mg.gid');
oci_execute($stid);
$genres_list = null;
while($row = oci_fetch_assoc($stid)) {
$genres_list .= $row['GENRE'];
if($num_rows > 1) {
$genres_list .= ' | ';
$num_rows--;
}
}
$Template->assignReferences(array(
'Index:LinkURI' => $link_uri,
'Movie:Title' => $info['TITLE'],
'Movie:Year' => $info['YEAR'],
'Movie:GenresList' => $genres_list,
'Movie:Synopsis' => $info['SYNOPSIS'],
'Movie:PosterURL' => $info['POSTER_URL'] // FIX: Handle empty poster link
));
$Template->renderTemplate('movieinfo');
} else {
// TODO: How to handle this error?
}
} else {
// TODO: How to handle this error?
}
하지만 마음에 안 들어요.행 수를 세려면 항상 2개의 쿼리를 수행한 다음 실제 데이터를 선택해야 합니다. 코드 행 수가 너무 많아서 행 수를 셀 수 없습니다.
이 코드에는 표시되지 않지만(더 나은 해결책을 찾고 있기 때문에) 영화 감독/작가에게도 동일한 작업을 수행해야 합니다.
이것을 달성할 수 있는 더 좋고 간단한 해결책이 있습니까, 아니면 이것이 유일한 방법입니까?
Fetch 루프에 구분 기호를 추가한 다음 PHP 함수를 사용하여 문자열에서 마지막 구분 기호를 자를 수 있지만, 이 프로젝트에서는 시퀀스, 뷰, 함수, 프로시저 및 트리거를 사용해야 합니다.이것들 중에 내 문제를 해결하는 데 도움이 되는 것이 있습니까?
시퀀스가 무엇인지 알고 있습니다. 이미 사용하고 있지만 어떻게 도움이 될 수 있는지 모르겠습니다.
VIES의 경우 코드를 그렇게 단순화하지는 않을 것입니다(기본적으로 저장된 쿼리입니다).기능, 절차 및 트리거에 대해 제가 이해하는 한, 저는 그것들이 어떻게 도움이 될 수 있는지 알 수 없습니다.
해결책?
왜 처음이 중요합니까?선택한 영화 제목만 발행하면 됩니다.찾을 수 없으면 오류 처리를 수행합니다.그렇다면 계속 진행하십시오!카운트가 정말 필요한 경우 분석을 사용하여 쿼리에 카운트를 추가합니다.
'SELECT title, year, synopsis, poster_url
, COUNT(*) OVER (PARTITION BY mid) mcount
FROM movies
WHERE mid = '.$mid
장르 선택도 마찬가지입니다.
편집:
Analytic Functions 링크에 대한 Oracle 문서.Oracle 문서에서 분석을 수행하는 것이 다소 어렵다는 것을 알게 되었습니다.Shouvik Basu의 Example에 의한 분석 기능은 사용 방법에 대한 간단한 지침을 제공하고 저에게 많은 도움을 주었습니다.
해보세요.
$conn = oci_pconnect('user', 'password', 'connectionstring');
$resource = oci_parse($conn, $sql);
oci_execute($resource, OCI_DEFAULT);
$results=array();
$numrows = oci_fetch_all($resource, $results, null, null, OCI_FETCHSTATEMENT_BY_ROW);
건배.
선택할 때 mysql_num_rows처럼 동작해야 하는 OCIROW 수를 사용할 수 있습니다.
oci_num_rows() oci_fetch_array() 실행 후 총 행 수를 제공합니다.
언급URL : https://stackoverflow.com/questions/4369129/counting-number-of-selected-rows-in-oracle-with-php
'programing' 카테고리의 다른 글
mysqdump 시 사용자를 지정하는 것과 지정하지 않는 것의 차이점은 무엇입니까? (0) | 2023.08.07 |
---|---|
시간 지연이 있는 작업을 반복하시겠습니까? (0) | 2023.08.02 |
왼쪽 외부 조인에 대한 SQL 성능이 존재하지 않음 (0) | 2023.08.02 |
"이것.앱inits[i]는 함수가 아닙니다. (0) | 2023.08.02 |
코드에서 SceneKit SCNskinner 개체를 만드는 방법은 무엇입니까? (0) | 2023.08.02 |