Are any of you aware of a library that helps you build/manipulate SQL queries, that supports JOIN\'s?
It would give a lot of flexibility i\'d think if you have somet
This seems to be a SQL builder with complex join support: http://laravel.com/docs/queries
I highly recommend CakePHP. It creates joins for you automatically, based on the associations between tables.
Say if you were writing a blog:
app/model/post.php:
class Post extends AppModel {
var $hasMany = array('Comment');
}
app/controller/posts_controller.php:
function view($id) {
$this->set('post', $this->Post->read(null, $id));
}
app/views/posts/view.ctp:
<h2><?php echo $post['Post']['title']?></h2>
<p><?php echo $post['Post']['body']; /* Might want Textile/Markdown here */ ?></p>
<h3>Comments</h3>
<?php foreach($post['Comment'] as $comment) { ?>
<p><?php echo $comment['body']?></p>
<p class="poster"><?php echo $comment['name']?></p>
<?php } ?>
That would be all you have to write to view a blog post, your database schema is read and cached. As long as you keep it consistent with the conventions, you don't have to tell cake anything about how your table is set up.
posts:
id INT
body TEXT
created DATETIME
comments:
id INT
body TEXT
name VARCHAR
post_id INT
It has adapters to support MySQL, MSSQL, PostgreSQL, SQLite, Oracle and others. You can also wrap webservices as models, and even get it to do joins between data in your database and remote data! It's very clever stuff.
Hope this helps :)
superfast SQLObject based IteratorQuery from pastaPHP
iterates over resource
foreach(_from('users u')
->columns("up.email_address AS EmailAddress", "u.user_name AS u.UserName")
->left('userprofiles up', _eq('u.id', _var('up.id')))
->where(_and()->add(_eq('u.is_active',1)))
->limit(0,10)
->order("UserName")
->execute("myConnection") as $user){
echo sprintf(
'<a href="mailto:%s">%s</a><br/>',
$user->EmailAdress,
$user->UserName
);
}
Zend_Db_Select from the Zend_Db package of the Zend Framework can do such things as:
// Build this query:
// SELECT p."product_id", p."product_name", l.*
// FROM "products" AS p JOIN "line_items" AS l
// ON p.product_id = l.product_id
$select = $db->select()
->from(array('p' => 'products'), array('product_id', 'product_name'))
->join(array('l' => 'line_items'), 'p.product_id = l.product_id');
(from Example 11.54. Example of the join() method in the Zend Framework Manual)
If you don't like to run a full-blown ORM package, this could be the way to go.