Hi,

> Order By clause without Limit returns:-
> A
> B
> C
> C
> C
> C
> C
> C
> M
> N
> T
> W
>
> Order By clause with Limit returns:-
>
> C
> C
> C
> C
> C
> C
> M
> N
> T
> W
>
> Is there any way to fix this, so that the results with the limit comes
> out starting with the A and then moves on to the next pages?

Hadn't thought about this before, but what it means (I guess) is that LIMIT
works on the selection, not on the presentation.

What I'm trying to say is that when you consider the sequence in which a
SELECT statement is carried out by the database, an ORDER BY is the second
but last thing that's done (the last being a further restriction of the
result set through a HAVING clause, if present). At the time of the ordering
you already have a result set for the query, and the database is now only
working on the way this result set is presented to the user.

I presume that LIMIT applies to the gathering of the result set, i.e. you
get the required number of rows from the query up to and including the WHERE
clause. Only then it gets ordered, but if your result set does not contain
the records with an 'A' they can't get ordered either. Don't know whether
I'm explaining this very well, but perhaps you get the idea.

...

Have gone and tested it now (3.23.42 on Win2K). Here is the SQL text and the
results:

---< cut

DROP DATABASE IF EXISTS ordertest;
CREATE DATABASE ordertest;
USE ordertest;

CREATE TABLE letters (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  letter CHAR NOT NULL
);

INSERT INTO letters
  (letter)
VALUES
  ('C'),
  ('C'),
  ('C'),
  ('C'),
  ('C'),
  ('C'),
  ('M'),
  ('N'),
  ('T'),
  ('W'),
  ('A'),
  ('B');

SELECT letter
FROM   letters
LIMIT  10;

+--------+
| letter |
+--------+
| C      |
| C      |
| C      |
| C      |
| C      |
| C      |
| M      |
| N      |
| T      |
| W      |
+--------+
10 rows in set (0.00 sec)

SELECT letter
FROM   letters
ORDER  BY letter
LIMIT  10;

+--------+
| letter |
+--------+
| A      |
| B      |
| C      |
| C      |
| C      |
| C      |
| C      |
| C      |
| M      |
| N      |
+--------+
10 rows in set (0.37 sec)

--< cut

Surprise, surprise, turns out MySQL behaves not the way I thought it would,
but rather the way you thought it should. Are you perhaps running a
different version? And could you perhaps show us your table structure(s) and
query so that we can find out what's really happening there?

Cheers,
Christian Sage


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to