Mysql SELECT语句按计数顺序排列

I am not sure if this is possible or not

I have a table with orders and userid

I need to do a SELECT query with ORDER BY the least number of orders of a customer

Example:

userid1 has 10 orders
userid2 has 5 orders

Then SELECT should show userid2 at the top

Thanks in advance

If you have orders as ordersCount i mean as a field which keeps counts of orders then

Select * FROM YourTable order by orders ASC

Else if you have a record for each order then

Select * FROM YourTable Group by UserID order by count(*) ASC;

Apply limit like this

Select * 
     FROM YourTable 
     Group by UserID 
     order by count(*) ASC 
     limit startIndex, fetchSize;

where startIndex and fetchSize are int that define your limit

You can select the COUNT of a column and give it a name, then use that name to sort by. Here's an example:

SELECT
    p.*,
    (SELECT COUNT(o.order_id) FROM orders AS o WHERE p.partron_id=p.patron_id) AS orderCount
FROM
    patrons AS p
WHERE
    ...
ORDER BY
    orderCount ASC

UPDATE: Just realized this is only useful if you have orders in a separate table than patrons. Disregard if you are only looking at a single table.

This query expects you to have two tables, a patron table with patron information like name, and a orders table that has a patron_id column that matches the identity column in the patron table.

The advantage to doing this is that you can request patron information at the same time, so you don't need to run two queries in PHP if you're going to use that information.

You need to group by the userid so you can count orders by user.

SELECT userid, count(1) FROM orders GROUP BY userid ORDER BY count(1) asc

You can accomplish that using GROUP BY and ordering by COUNT().

It would be something like that.

SELECT userid, COUNT(*) qt
FROM orders
GROUP BY userid
ORDER BY qt

If each order is in its own row, however, you need to aggregate them:

SELECT * from MYTABLENAME GROUP BY userid ORDER BY COUNT(*)

Count is what you're looking for

SELECT count(theField) as theCount, *
FROM theTable
GROUP BY theField
ORDER BY theCount