我正在爲大學做這個項目,這個項目基本上是一個電影數據庫,對於一些查詢我需要知道有多少行被選中。目前,有2種情況,我需要這樣的:用PHP計算Oracle中SELECTED行的數量
- 顯示單個影片信息。我希望所選行的數量知道數據庫是否包含用戶選擇的電影。 或者有更好的解決方案嗎?
- 該選定的電影有類型,我需要知道多少,這樣我才能構造一個字符串,其中的類型以
|
分隔,而不會在字符串的末尾添加一個。
用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個查詢來計算行數,然後選擇實際的數據,並且有太多的代碼行來計算行數。
此代碼不顯示它(還沒有完成它,因爲我正在尋找一個更好的解決方案),但我也需要爲電影導演/作家做同樣的事情。
有沒有更好的和更簡單解決方案來完成這或這是唯一的方法?
我可以在提取循環中添加分隔符,直到完成,然後使用PHP函數修剪字符串中的最後一個分隔符,但對於此項目,我不得不使用SEQUENCES,VIEWS,FUNCTIONS,PROCEDURES和TRIGGERS。這些有助於解決我的問題嗎?
我知道什麼序列,我已經在使用它們了,但我看不出它們有什麼幫助。
對於VIEWS來說,它們可能不會簡化代碼那麼多(它基本上是一個存儲的查詢正確的?)。對於功能,程序和觸發器,據我所知,我看不出有什麼幫助。
解決方案?
將+1標記爲家庭作業 – Knubo 2010-12-06 17:27:40
您的數據庫模式已設置,還是應該創建它? – Knubo 2010-12-06 17:29:04
oci_num_rows如何不同? – Breezer 2010-12-06 17:29:31