Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Database Server Software > MySQL > MySQL General forum

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-29-2008, 08:27 PM
j's mysql general
 
Posts: n/a
Default Odd Results on Mysql LIMIT and ORDER BY

Hi Guys,

Firstly, this is the only time I have ever encountered this problem and
searching archives or google shed no luck since yesterday so here I am .

I have a table described below:

mysql> describe containers;
+--------------------+------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default |
Extra |
+--------------------+------------------------+------+-----+---------+----------------+
| internal_id | mediumint(20) unsigned | NO | PRI | NULL |
auto_increment |
| category_id | smallint(20) unsigned | YES | MUL | NULL
| |
| user_id | mediumint(20) unsigned | YES | MUL | NULL
| |
| parts_amount | int(2) | NO | | 0
| |
| file_name | varchar(64) | NO | MUL |
| |
| file_format | varchar(5) | NO | MUL |
| |
| file_info | text | NO | | NULL
| |
| file_description | text | YES | | NULL
| |
| admin_comments | text | YES | | NULL
| |
| is_approved | tinyint(1) | YES | MUL | 0
| |
| is_shared | tinyint(1) | YES | MUL | 1
| |
| is_deleted | tinyint(1) | YES | | 0
| |
| upload_date | bigint(10) | NO | MUL | 0
| |
| downloads | int(11) | YES | MUL | 0
| |
| last_download_date | bigint(10) | NO | MUL | 0
| |
| rating | decimal(3,1) | YES | MUL | 0.0
| |
| ftp_site | smallint(6) | NO | MUL | 0
| |
| total_votes | int(11) | NO | MUL | NULL
| |
| total_dnloads | int(11) | NO | | NULL
| |
| total_votes_ave | float | NO | | 0
| |
| total_votes_sum | int(11) | NO | | NULL
| |
| file_img | varchar(120) | NO | | NULL
| |
| file_extended_info | text | NO | | NULL
| |
| file_exist | tinyint(4) | NO | MUL | 0
| |
| post_options | varchar(20) | NO | | NULL
| |
+--------------------+------------------------+------+-----+---------+----------------+
25 rows in set (0.00 sec)

mysql> select count(*) from containers;
+----------+
| count(*) |
+----------+
| 9504 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from containers where upload_date < 1209208414 and
category_id = 120;
+----------+
| count(*) |
+----------+
| 795 |
+----------+
1 row in set (0.01 sec)

And I have queries like these:

select * from containers where upload_date < 1209208414 and category_id =
120 order by upload_date desc limit 0,25

and

select * from containers where upload_date < 1209208414 and category_id =
120 order by upload_date desc limit 175,25

These queries are dynamically generated and is is being paged for browser
display so the second query means I am on the 8th page for 25 items each
page.

The problem is, offsets 0...150 (LIMIT [0...150],25) will not return any
results while 175 onwards will. This happens only when I am filtering
category_id 120, all other categories does not yield this odd result. I have
no clue whatsoever what is going on, executing the query directly from the
server yields the same results. Now, if I omit either the order by or limit
clauses I get results all through out.

Hope someone can shed some light.

Jervin

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-29-2008, 08:27 PM
Brent Baisley
 
Posts: n/a
Default Re: Odd Results on Mysql LIMIT and ORDER BY

You may want to check on the version you are running. There have been
a few odd bugs in various MySQL versions in regards to limits and
order by filtering. Although it usually involved joins and/or unions.
If you can't or don't want to upgrade your MySQL version, you can try
restructuring your query like this:

select * from (
select * from containers where upload_date < 1209208414 and
category_id =
120 order by upload_date desc ) as filter
limit 175,25

Technically, it's the same query and should return the same results.
It will be a little more intensive, since the inner query returns all
records, then a limit is imposed.

Brent Baisley
Systems Architect


On Apr 26, 2008, at 7:22 AM, j's mysql general wrote:

> Hi Guys,
>
> Firstly, this is the only time I have ever encountered this problem
> and
> searching archives or google shed no luck since yesterday so here I
> am .
>
> I have a table described below:
>
> mysql> describe containers;
> +--------------------+------------------------+------+-----+---------
> +----------------+
> | Field | Type | Null | Key | Default |
> Extra |
> +--------------------+------------------------+------+-----+---------
> +----------------+
> | internal_id | mediumint(20) unsigned | NO | PRI | NULL |
> auto_increment |
> | category_id | smallint(20) unsigned | YES | MUL | NULL
> | |
> | user_id | mediumint(20) unsigned | YES | MUL | NULL
> | |
> | parts_amount | int(2) | NO | | 0
> | |
> | file_name | varchar(64) | NO | MUL |
> | |
> | file_format | varchar(5) | NO | MUL |
> | |
> | file_info | text | NO | | NULL
> | |
> | file_description | text | YES | | NULL
> | |
> | admin_comments | text | YES | | NULL
> | |
> | is_approved | tinyint(1) | YES | MUL | 0
> | |
> | is_shared | tinyint(1) | YES | MUL | 1
> | |
> | is_deleted | tinyint(1) | YES | | 0
> | |
> | upload_date | bigint(10) | NO | MUL | 0
> | |
> | downloads | int(11) | YES | MUL | 0
> | |
> | last_download_date | bigint(10) | NO | MUL | 0
> | |
> | rating | decimal(3,1) | YES | MUL | 0.0
> | |
> | ftp_site | smallint(6) | NO | MUL | 0
> | |
> | total_votes | int(11) | NO | MUL | NULL
> | |
> | total_dnloads | int(11) | NO | | NULL
> | |
> | total_votes_ave | float | NO | | 0
> | |
> | total_votes_sum | int(11) | NO | | NULL
> | |
> | file_img | varchar(120) | NO | | NULL
> | |
> | file_extended_info | text | NO | | NULL
> | |
> | file_exist | tinyint(4) | NO | MUL | 0
> | |
> | post_options | varchar(20) | NO | | NULL
> | |
> +--------------------+------------------------+------+-----+---------
> +----------------+
> 25 rows in set (0.00 sec)
>
> mysql> select count(*) from containers;
> +----------+
> | count(*) |
> +----------+
> | 9504 |
> +----------+
> 1 row in set (0.00 sec)
> mysql> select count(*) from containers where upload_date <
> 1209208414 and
> category_id = 120;
> +----------+
> | count(*) |
> +----------+
> | 795 |
> +----------+
> 1 row in set (0.01 sec)
>
> And I have queries like these:
>
> select * from containers where upload_date < 1209208414 and
> category_id =
> 120 order by upload_date desc limit 0,25
>
> and
>
> select * from containers where upload_date < 1209208414 and
> category_id =
> 120 order by upload_date desc limit 175,25
>
> These queries are dynamically generated and is is being paged for
> browser
> display so the second query means I am on the 8th page for 25 items
> each
> page.
>
> The problem is, offsets 0...150 (LIMIT [0...150],25) will not return
> any
> results while 175 onwards will. This happens only when I am filtering
> category_id 120, all other categories does not yield this odd
> result. I have
> no clue whatsoever what is going on, executing the query directly
> from the
> server yields the same results. Now, if I omit either the order by
> or limit
> clauses I get results all through out.
>
> Hope someone can shed some light.
>
> Jervin


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 04:44 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145