RE: Return every Nth row in a result set

2002-12-22 Thread SpamSucks86
I really don't want to do this client side (I'd have to execute
approximately 10 queries for every page load just for this small task).
Selecting the entire table into a temp table to number the rows also
seems rather inefficient. I was reading in a book at Barnes and Noble
yesterday which said to use a query that looked something like this:

SELECT a.id FROM documents as a, documents as b WHERE a.id = b.id GROUP
BY a.id HAVING MOD(a.id,:n);

I'm nearly positive that that isn't exactly what it said, but it was
something like that. If anyone can come up with a way to do this without
a temporary table and only one or two queries (using 3.x or 4.0) that'd
be great. Thanks for the help guys.

-Greg


-
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




RE: Return every Nth row in a result set

2002-12-22 Thread SpamSucks86
I can't do it by ID because what if a row in the middle somewhere gets
deleted? I need to do it by the position in the table, and a static
numbering column won't work. This is a solution someone on EFNet came up
with:

SET @rowcount=0;
select docid,@rowcount:=@rowcount+1 as num FROM documents HAVING
(num+1)%6=0

It works. However, if I do:

SET @rowcount=0;
SELECT docid,@rowcount:=@rowcount+1 as num FROM documents;

The num associated with each docid is different than the ones that
return from the first query. This seems weird, possibly a bug? 

Here are the results for you guys to chew on. As you will see, in the
first result set, when docid=55, num=25 (25th record in the table).

However, on the second result set, when docid=55, num=30. I can prove
that docid=55 is actually the 25th record in the table because:

SELECT docid FROM documents LIMIT 24,1

Returns docid=55. I'd love to hear what you guys think. Here's the
result I promised:




mysql select docid,@rowcount:=@rowcount+1 as num from documents limit
40;
+---+--+
| docid | num  |
+---+--+
| 2 |1 |
| 4 |2 |
| 5 |3 |
| 6 |4 |
| 7 |5 |
| 8 |6 |
| 9 |7 |
|10 |8 |
|11 |9 |
|12 |   10 |
|13 |   11 |
|14 |   12 |
|15 |   13 |
|16 |   14 |
|17 |   15 |
|20 |   16 |
|21 |   17 |
|34 |   18 |
|35 |   19 |
|36 |   20 |
|37 |   21 |
|39 |   22 |
|40 |   23 |
|41 |   24 |
|55 |   25 |
|56 |   26 |
|59 |   27 |
|61 |   28 |
|77 |   29 |
|80 |   30 |
|81 |   31 |
|82 |   32 |
|83 |   33 |
|84 |   34 |
|85 |   35 |
|86 |   36 |
|88 |   37 |
|93 |   38 |
|   106 |   39 |
|   109 |   40 |
+---+--+
40 rows in set (0.00 sec)





mysql select docid,@rowcount:=@rowcount+1 as num FROM documents HAVING
(num+1)%6=0 LIMIT 30;
+---+--+
| docid | num  |
+---+--+
| 7 |6 |
|12 |   12 |
|17 |   18 |
|36 |   24 |
|55 |   30 |
|80 |   36 |
|85 |   42 |
|   109 |   48 |
|   119 |   54 |
|   125 |   60 |
|   136 |   66 |
|   147 |   72 |
|   152 |   78 |
|   160 |   84 |
|   166 |   90 |
|   171 |   96 |
|   178 |  102 |
|   185 |  108 |
|   191 |  114 |
|   207 |  120 |
|   213 |  126 |
|   218 |  132 |
+---+--+
22 rows in set (0.00 sec)

-Original Message-
From: Benjamin Pflugmann [mailto:[EMAIL PROTECTED]] 
Sent: Sunday, December 22, 2002 10:41 AM
To: SpamSucks86
Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: Return every Nth row in a result set

Hello.

On Sun 2002-12-22 at 08:56:43 -0500, [EMAIL PROTECTED] wrote:
 I really don't want to do this client side (I'd have to execute
 approximately 10 queries for every page load just for this small
task).
 Selecting the entire table into a temp table to number the rows also
 seems rather inefficient. I was reading in a book at Barnes and Noble
 yesterday which said to use a query that looked something like this:
 
 SELECT a.id FROM documents as a, documents as b WHERE a.id = b.id
GROUP
 BY a.id HAVING MOD(a.id,:n);
 
 I'm nearly positive that that isn't exactly what it said, but it was
 something like that. If anyone can come up with a way to do this
without
 a temporary table and only one or two queries (using 3.x or 4.0)
that'd
 be great. Thanks for the help guys.

Well, the solution is already in there: they suggest using a HAVING
clause to reduce the rows after the complete result set has been
determined. And to use MOD(id, number) to select which rows to keep.
MOD(id,10) will return 0 for multiples of 10. So, if you want every
10th rows, you would use

  SELECT * FROM your_table WHERE some_condition HAVING NOT MOD(id,10)

If you still encounter problems, please elaborate. And include a real
example of what you tried.

HTH,

Benjamin.

-- 
[EMAIL PROTECTED]


-
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




Return every Nth row in a result set

2002-12-21 Thread SpamSucks86
What would be the SQL query to return every Nth row in a result set? So
it would return the 5th row, the 10th row, the 15th row, etc. Thanks for
any and all replies!




Benchmark Results or MySQL Articles Needed!

2002-10-02 Thread SpamSucks86

For science fair I'm doing a project on MySQL. For my introduction, I
need some articles, benchmarks, or anything else credible that I can put
in the bibliography. If anyone can help me out, I'd be extremely
appreciative! Thanks.