There is no magic solution - you are talking about managing multiple environments with different requirements and technologies in some meaningful, automated way.
You're looking at home-brew here.
What you want to aim for is
0) Stop using multiple technologies if you can. If that's not an option, it just makes more work.
1) Clearly define policies regarding development, testing, and release. These have nothing to do with tools. You build and select your tools based on these policies.
2) Automated pushbutton deployment. You want your code releases of each new version of a site to be automated. You also want rolling back to the previous version to be automated. This applies for CI, QA, and whatever other stages you want, all the way to Production.
3) Automated deployment should involve at a minimum tagging a given revision and pushing it to the correct environment.
4) You can use commit hooks or some other method against TRUNK to run a CI server that continually does regression testing and other funky stuff... as well as just shows you a live version of what's in trunk "right now".
5) When working towards a target release,developers need to include any necessary scripts to update (and rollback, if necessary) their respective databases.
6) Config data... can be handled by having a separate /config folder for each environment, version controlled separately - and where access and change control are again strictly defined and limited, and well documented. this would automatically be inserted by your pushbutton deployment process.