Here's an example of what I mean. Lets say you're looking for a list of threads, but at the same time, you want to know what the name (not id) of the forum they're in, the test from the first post in that thread and the actual image url for that post's icon.
You COULD, as I have seen other code do, grab the thread info and for each row of thread info query the post, forum and icon tables. If you're grabbing 10 threads, thats 31 queries. WAY INEFFICIENT!
The right way to do it is with a single query and compounded left joins. Here is an example:
SELECT vb_thread.votenum, vb_thread.votetotal, vb_thread.replycount, vb_thread.threadid, vb_thread.iconid, vb_thread.title, vb_thread.postusername, vb_thread.lastposter, vb_thread.dateline, vb_icon.iconpath, vb_post.pagetext, vb_forum.title as forumtitle FROM vb_thread LEFT JOIN vb_icon ON (vb_thread.iconid=vb_icon.iconid) LEFT JOIN vb_post on (vb_thread.firstpostid=postid) LEFT JOIN vb_forum ON (vb_thread.forumid=vb_forum.forumid) WHERE vb_thread.forumid=$SEARCHFORUM ORDER BY sticky DESC, vb_thread.dateline DESC LIMIT 10
You are correct. I can't speak for the stock NUKE modules. But this is how MY code works. I take the time to make the most efficient use of the database that I possibly can.
Remember, I'm a Texan and this ain't my first rodeo.
|