usmanhalalit / pixie

Database query builder for PHP, framework agnostic, lightweight and expressive.
MIT License
671 stars 179 forks source link

count() problem when groupBy is used #180

Open mtarlac opened 6 years ago

mtarlac commented 6 years ago

Hello

Not sure am I missing something, but seems that count() doesn't work properly when groupBy is used

For example $query = PB::table('orders') ->leftJoin('admins', 'admins.id', '=', 'orders.admins_id') ->select('orders.*', 'admins.first_name', 'admins.last_name'); $no = $query->count();

works but

$query = PB::table('orders') ->leftJoin('admins', 'admins.id', '=', 'orders.admins_id') ->select('orders.*', 'admins.first_name', 'admins.last_name')->groupBy('orders.id'); $no = $query->count();

doesn't work and returns 1 as count.

eL-Prova commented 6 years ago

Have you looked what the raw output is of both? Can you please post that too?

mtarlac commented 6 years ago

Hi

Raw query seems Ok

SELECTorders.*,admins.first_name,admins.last_nameFROMordersLEFT JOINadminsONadmins.id=orders.admins_id``

and with groupBy

SELECTorders.*,admins.first_name,admins.last_nameFROMordersLEFT JOINadminsONadmins.id=orders.admins_idGROUP BYorders.id``

both queries returns the same rows (in this case) but the first one is counted properly while the second one shows 1.

usmanhalalit commented 6 years ago

Hi @mtarlac, can you please run this query in your database manually and see what it returns?

SELECT orders.*, admins.first_name, admins.last_name FROM orders LEFT JOIN admins ON admins.id=orders.admins_id GROUP BY orders.id

If it return 1 there then don't you think it's a data or querying issue?

mtarlac commented 6 years ago

Sure but it returns >1 rows since there are more than one order...

usmanhalalit commented 6 years ago

So when querying manually it returns correct and when querying using Pixie it returns 1?

On Sat, Feb 17, 2018, 19:38 mtbl notifications@github.com wrote:

Sure but it returns >1 rows since there are more than one order...

— You are receiving this because you commented.

Reply to this email directly, view it on GitHub https://github.com/usmanhalalit/pixie/issues/180#issuecomment-366442043, or mute the thread https://github.com/notifications/unsubscribe-auth/AA74L-mkFnKmFnspDvJydgZ23Z3AghWgks5tVtZLgaJpZM4R-RuO .

mtarlac commented 6 years ago

Yes..

Code: `$query = PB::table('orders') ->leftJoin('admins', 'admins.id', '=', 'orders.admins_id') ->select('orders.*', 'admins.first_name', 'admins.last_name')->groupBy('orders.id');

$no = $query->count();`

In this example with and without "->groupBy('orders.id')" should return the same result since there are no Count, SUM or other aggregate functions.

But in case you want to count (for example) items in order_items table and group them by order it doesn't work.

usmanhalalit commented 6 years ago

I'll try to reproduce, thanks!