अगर आप $tagsResult
. को इंडेक्स करते हैं postId
. द्वारा , जो आप FETCH_GROUP
. का उपयोग करके कर सकते हैं , तो आप आंतरिक नेस्टेड लूप को हटा सकते हैं और एक निश्चित पोस्ट के साथ सभी टैग्स को स्थिर समय में पकड़ सकते हैं:
$sql = "
SELECT pt.idPost, — select idPost first so it’s grouped by this col
t.*
FROM tags t JOIN poststags pt ON t.id=pt.idTag
WHERE pt.idPost IN (array of post ids)
";
$stmt=$db->prepare($sql);
$stmt->execute();
$tagsResult = $smt->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_OBJ);
//$tagsResult is now grouped by postId
//see https://stackoverflow.com/questions/5361716/is-there-a-way-to-fetch-associative-array-grouped-by-the-values-of-a-specified-c
foreach($postsResult as &$post) {
if(isset($tagsResult[$post->id])) {
$post->tags = $tagsResult[$post->id];
}
else {
$post->tags = array();
}
}