My organization runs an online auction on our intranet server for the United 
Way. I'm having a hard time printing out a list of the winning bidders (I'm 
under a lot of pressure; the baked goods are getting stale).

In these examples, I've just printed out my bidder's first names, to protect 
their privacy.

This output seems correct. I could just manually scan this for the maximum 
value for each item:
mysql> SELECT CONCAT(a.title, " (", LEFT(b.auction,4), ")") AS FullTitle, 
SUBSTRING_INDEX(u.name, " ", 1) AS fname, b.bid FROM PHPAUCTION_bids AS b, 
PHPAUCTION_users AS u, PHPAUCTION_auctions AS a WHERE b.bidder=u.id AND 
b.auction=a.id ORDER BY FullTitle LIMIT 35;
+--------------------------------------------------------------+---------------+---------+
| FullTitle                                                    | fname         
| bid     |
+--------------------------------------------------------------+---------------+---------+
| 101 Dalmations, Oliver & Company, A Goofy Movie - VHS (d7b4) | Lisa          
|  2.0000 |
| 101 Dalmations, Oliver & Company, A Goofy Movie - VHS (d7b4) | Saori         
|  3.0000 |
| 2 dozen chocolate chip cookies (30c1)                        | Anne          
|  5.0000 |
| 2 dozen chocolate chip cookies (30c1)                        | ucantoutbidme 
|  6.0000 |
| 2 dozen chocolate chip cookies (30c1)                        | Anne          
| 10.0000 |
| 2 dozen chocolate chip cookies (30c1)                        | ucantoutbidme 
| 11.0000 |
| 2 dozen chocolate chip cookies (a3aa)                        | Donna         
|  3.0000 |
| 2 dozen chocolate chip cookies (a3aa)                        | Linda         
|  4.0000 |
| 2 dozen chocolate chip cookies (a3aa)                        | Donna         
|  5.0000 |
| 2 dozen chocolate chip cookies (a3aa)                        | ucantoutbidme 
|  6.0000 |
| 2 dozen chocolate chip cookies (a3aa)                        | Donna         
|  7.0000 |
| 2 dozen chocolate chip cookies (d8e5)                        | Cheryl        
|  2.0000 |
| 2 dozen chocolate chip cookies (d8e5)                        | ucantoutbidme 
|  3.0000 |
| 2 dozen chocolate chip cookies (d8e5)                        | Cheryl        
|  5.0000 |
| 2 dozen chocolate chip cookies (d8e5)                        | ucantoutbidme 
|  6.0000 |
| 2 dozen chocolate chip cookies (d8e5)                        | Donna         
|  8.0000 |
| 2 Gold Rings (d9c1)                                          | Mandy         
|  2.0000 |
| 2 Gold Rings (d9c1)                                          | Isabelle      
|  3.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
|  4.0000 |
| 2 Gold Rings (d9c1)                                          | Isabelle      
|  5.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
|  6.0000 |
| 2 Gold Rings (d9c1)                                          | Roslyn        
|  7.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
|  8.0000 |
| 2 Gold Rings (d9c1)                                          | Roslyn        
| 10.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
| 12.0000 |
| 2 Gold Rings (d9c1)                                          | Roslyn        
| 15.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
| 16.0000 |
| 2 Gold Rings (d9c1)                                          | Linda         
| 20.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
| 21.0000 |
| 2 Gold Rings (d9c1)                                          | t             
| 22.0000 |
| 2 Gold Rings (d9c1)                                          | Hugh          
| 23.0000 |
| 2 Gold Rings (d9c1)                                          | Linda         
| 25.0000 |
| 2 Gold Rings (d9c1)                                          | t             
| 26.0000 |
| 2 piece outfit (purple and white) (d60d)                     | Mandy         
|  1.0000 |
| 2 piece outfit (purple and white) (d60d)                     | Susan         
|  3.0000 |
+--------------------------------------------------------------+---------------+---------+
35 rows in set (0.06 sec)

mysql> 

Note that there were actually three different batches of "2 dozen chocolate 
chip cookies." I printed the internal ID numbers to distinguish them.

However, when I try to get fancy and print out just the winners, the winning 
amount comes out, but with the name of the FIRST, not the winning, bidder:
mysql> SELECT CONCAT(a.title, " (", LEFT(b.auction,6), ")") as FullTitle, 
SUBSTRING_INDEX(u.name, " ", 1) AS fname, MAX(b.bid) FROM PHPAUCTION_bids AS b, 
PHPAUCTION_users AS u, PHPAUCTION_auctions AS a WHERE b.bidder=u.id AND 
b.auction=a.id GROUP BY FullTitle ORDER BY FullTitle LIMIT 5;
+----------------------------------------------------------------+--------+------------+
| FullTitle                                                      | fname  | 
MAX(b.bid) |
+----------------------------------------------------------------+--------+------------+
| 101 Dalmations, Oliver & Company, A Goofy Movie - VHS (d7b448) | Lisa   |     
3.0000 |
| 2 dozen chocolate chip cookies (30c106)                        | Anne   |    
11.0000 |
| 2 dozen chocolate chip cookies (a3aa96)                        | Donna  |     
7.0000 |
| 2 dozen chocolate chip cookies (d8e539)                        | Cheryl |     
8.0000 |
| 2 Gold Rings (d9c17f)                                          | Mandy  |    
26.0000 |
+----------------------------------------------------------------+--------+------------+
5 rows in set (0.08 sec)

mysql> 
In this example, I think that the only reason the  second batch of "2 dozen 
chocolate chip cookies" winner is correct is because she was also the first 
bidder.

I even tried to create a separate table with just the winners and work from 
that, but with the wrong results:
mysql> CREATE TABLE winners SELECT auction, bidder, MAX(bid) AS winningbid FROM 
PHPAUCTION_bids GROUP BY auction;
Query OK, 205 rows affected (0.01 sec)
Records: 205  Duplicates: 0  Warnings: 0

mysql> SELECT CONCAT(a.title, "(", LEFT(w.auction,6), ")") AS itemname, 
SUBSTRING_INDEX(u.name, " ", 1) AS fname, winningbid FROM winners AS w, 
PHPAUCTION_users AS u, PHPAUCTION_auctions AS a WHERE w.auction=a.id AND 
w.bidder=u.id ORDER BY itemname LIMIT 5;
+---------------------------------------------------------------+--------+------------+
| itemname                                                      | fname  | 
winningbid |
+---------------------------------------------------------------+--------+------------+
| 101 Dalmations, Oliver & Company, A Goofy Movie - VHS(d7b448) | Lisa   |     
3.0000 |
| 2 dozen chocolate chip cookies(30c106)                        | Anne   |    
11.0000 |
| 2 dozen chocolate chip cookies(a3aa96)                        | Donna  |     
7.0000 |
| 2 dozen chocolate chip cookies(d8e539)                        | Cheryl |     
8.0000 |
| 2 Gold Rings(d9c17f)                                          | Mandy  |    
26.0000 |
+---------------------------------------------------------------+--------+------------+
5 rows in set (0.03 sec)

mysql> 

I think the way to do this is with a nested SELECT, but I couldn't make any of 
my attempts work. Could someone please help me construct an SQL query which 
would just print out the correct winners for each auction? I'm using MySQL 
4.0.24 in Debian sarge.

Thanks for your advice and suggestions.

-Kevin Zembower

-----
E. Kevin Zembower
Internet Systems Group manager
Johns Hopkins University
Bloomberg School of Public Health
Center for Communications Programs
111 Market Place, Suite 310
Baltimore, MD  21202
410-659-6139

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to