What you're asking for can't be done in mysql. You'd need one of two things in order to be able to do what you want:
(1) The easier ability to select with a GROUP BY clause some method for picking which row to select. As it stands, what you really want is to order by post time desc, THEN group, but you must group first, and your group by will take the row that shows up first.
(2) Sub-selects.If you could subselect, you could handle this rather easily, but mysql doesn't have subselects.
The problem is that MAX(posting_time) gives you the result of the highest posting time in whatever you group by -- that is, posting_time WILL be the highest posting time for each c.story_id, but the rows mismatch! That is, if all you did was select id,MAX(posting_time) from comment_table group by story_id, you'll notice that you do get the max posting time for each story_id, but the actual c.id field may be for a ROW in the comment_table that has a posting_time value OTHER than the MAX, despite the results of that particular query returning the max. Wacky, eh?
I actually spent quite a while trying to find a way to do this, since I recall there being some new syntax in recent mysql versions where you can go SELECT * from blah where idx in (SELECT [...]), but I couldn't find the reference. That isn't QUITE a sub-select, but it could be manipulated to work like one, but I couldn't find the reference for that or what version it was added in (if I'm not just completely wrong)
Anyhow, what you're fundamentally doing is asking for the index field of a groupwise maximum, ie, what is the table_idx of max(bar) grouped by foo? There's a bunch of docs in the mysql manual which discuss it, and basically say: sorry. All you can do is double-select.
You can INSERT INTO TABLE SELECT storyid,MAX(posting_time) from comments group by storyid. Then you can join that temporary table into your query, and instead of grouping by storyid, you just reference the temp table with an extra where clause.