0
我有這個功能,從數據庫中,在歌曲表的歌曲,即量和藝術家從藝術家表誰在歌曲表歌曲量獲取信息:合併兩個查詢到單個查詢
function getInfo() {
try {
$q = $this->connection->prepare('SELECT artist_id FROM '.TBL_SONG.'');
$q->execute();
if ($q->rowCount() > 0) {
$songs = $q->rowCount();
} else {
$songs = '0';
}
$q = $this->connection->prepare('SELECT id FROM '.TBL_ARTIST.' a WHERE EXISTS (SELECT * FROM '.TBL_SONG.' s WHERE a.id = s.artist_id)');
$q->execute();
if ($q->rowCount() > 0) {
$artists = $q->rowCount();
} else {
$artists = '0';
}
return "<span class='italic'>Current songs: </span>".$songs." <span class='italic'>Active artists: </span>".$artists;
} catch (PDOException $e) {
echo RESULTS_ERROR;
logError($e->getMessage());
}
}
第一個查詢獲取歌曲表中的歌曲數量並將行數返回給變量。第二個查詢從歌手錶中獲取藝術家ID,如果他們在歌曲表中有歌曲。這個函數的結果是返回兩個值。
我希望能夠從單個查詢中返回這兩個值。我試着將它作爲一個查詢寫入並獲取結果並使用count函數來獲取我需要的行數量,但這似乎不起作用。真的不知道我要去哪裏錯了。另外,用if語句檢查行計數是否大於0並將其存儲在變量中是沒有意義的,因爲它無論如何都會返回值'0'?謝謝。
根據您的數據庫組織,你可能甚至不需要加入表格。您可能只能從歌曲表中統計id和artist_id。 – slashingweapon
啊,這個工程!玩弄它讓我產生了一些令人困惑的結果。我可以得到正確的藝術家數量,但是如果我將查詢的第二部分更改爲表格列而不是*,則會改變藝術家數量。此外,從$ - > fetch()更改爲$ q-> fetchAll(PDO :: FETCH_ASSOC)將導致其停止工作。最後,在第一部分中使用COUNT(id)作爲artist_count並在第二部分中使用COUNT(id)作爲song_count時,它將對藝術家有效,但對於歌曲計數,它會說未定義變量,即使知道它們都來自相同的數組:/ – Tom