ClanCats / Hydrahon

🐉 Fast & standalone PHP MySQL Query Builder library.
https://clancats.io/hydrahon/master/
MIT License
278 stars 58 forks source link

support subqueries as where values #50

Open midnightmonster opened 3 years ago

midnightmonster commented 3 years ago

Supports queries like this, which can be expressed as joins but are often easier to understand expressed this way--and faster to execute in MySQL:

$rentals = $h->table('rental_properties');
$favorites = $h->table('user_favorite_rental_properties');
$rentals->select()->where('id', 'in',
    $favorites->
        select(['rental_property_id'])->
        where('user_id',$_SESSION['user_id'])
)->where('available', true);

becomes

select * from `rental_properties` where `id` in (select `rental_property_id` from `user_favorite_rental_properties` where `user_id` = ?) and `available` = ?
[12345, true]

I'm on a deadline at the moment but will come back later this week to add some tests if you want them and approve this general approach.

radar3301 commented 3 years ago

Line 546: elseif (is_object($where[3]) && ($where[3] instanceof BaseQuery))

should be: elseif (is_object($where[3]) && ($where[3] instanceof SelectBase))