Re: a lil sql help please.

2006-07-09 Thread John L Meyer

m i l e s wrote:

Hi,

I have the following Query and Im a lil lost on this one

SELECT DISTINCT tbe_orders.order_id, tbe_orders.order_date,  
tbe_orders.order_piececount

FROM tbe_orders

The query produces the following results:

+++
+ order_id  + order_date  +  order_piececount +
+++
+ oid1  + 2006-07-08  +1  +
+ oid1  + 2006-07-08  +2  +
+ oid1  + 2006-07-08  +3  +
+ oid5  + 2006-07-08  +7  +
+ oid5  + 2006-07-08  +1  +
+ oid4  + 2006-07-08  +1  +
+ oid4  + 2006-07-08  +2  +
+ oid4  + 2006-07-08  +1  +
+++

This is actually right.  However, ideally what I'm wanting is this:

+++
+ order_id  + order_date  +  order_piececount +
+++
+ oid1  + 2006-07-08  +6  +
+ oid5  + 2006-07-08  +8  +
+ oid4  + 2006-07-08  +4  +
+++

Note the order_piececount column.

What do I need to do to my SQL statement to perform this action ?

My guess that I need to perform a secondary query inside the  
statement to get the computed value of order_piececount.


Anyone ?

M i l e s.

SELECT DISTINCT tbe_orders.order_id, tbe_orders.order_date,  
SUM(tbe_orders.order_piececount )

FROM tbe_orders GROUP BY order_id;



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



Re: a lil sql help please.

2006-07-09 Thread Davor Dundovic

At 18:51 9.7.2006, you wrote:

Hi,

I have the following Query and Im a lil lost on this one

SELECT DISTINCT tbe_orders.order_id, tbe_orders.order_date,
tbe_orders.order_piececount
FROM tbe_orders



SELECT tbe_orders.order_id, 
tbe_orders.order_date,  sum(tbe_orders.order_piececount)

FROM tbe_orders
GROUP BY tbe_orders.order_id

or

SELECT tbe_orders.order_id, 
tbe_orders.order_date,  sum(tbe_orders.order_piececount)

FROM tbe_orders
GROUP BY tbe_orders.order_id, tbe_orders.order_date


depending whether date matters or not.



Regards, Dundo.



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



a lil sql help please.

2006-07-09 Thread m i l e s

Hi,

I have the following Query and Im a lil lost on this one

SELECT DISTINCT tbe_orders.order_id, tbe_orders.order_date,  
tbe_orders.order_piececount

FROM tbe_orders

The query produces the following results:

+++
+ order_id  + order_date  +  order_piececount +
+++
+ oid1  + 2006-07-08  +1  +
+ oid1  + 2006-07-08  +2  +
+ oid1  + 2006-07-08  +3  +
+ oid5  + 2006-07-08  +7  +
+ oid5  + 2006-07-08  +1  +
+ oid4  + 2006-07-08  +1  +
+ oid4  + 2006-07-08  +2  +
+ oid4  + 2006-07-08  +1  +
+++

This is actually right.  However, ideally what I'm wanting is this:

+++
+ order_id  + order_date  +  order_piececount +
+++
+ oid1  + 2006-07-08  +6  +
+ oid5  + 2006-07-08  +8  +
+ oid4  + 2006-07-08  +4  +
+++

Note the order_piececount column.

What do I need to do to my SQL statement to perform this action ?

My guess that I need to perform a secondary query inside the  
statement to get the computed value of order_piececount.


Anyone ?

M i l e s.

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



SQL Help please

2003-09-11 Thread Dave Shelley
SQL guru's,

I could use some help writing a bit of SQL.
There's 3 tables:
orderable_parts
partID varchar,
topCatID int,  # top level category ID
...
part_attributes
partID varchar,
attName varchar,
attValue varchar,
...
topcatattributevalues
tcavID int,
topCatID int,
attName varchar,
attValue varchar,
...
orderable_parts has parts available on our web site. Theres about 40,000 of 
them
part_attributes are related to parts. Color, size etc. ~150,000 rows
topcatattributevalues is a list of all the distinct part attributes 
available in each top level category. They're used for web searches and for 
product managers to edit orderable_parts, ~100,000 rows

I'm trying to build a function to delete records from topcatattributevalues 
that are not used in any orderable_part. Either 1 delete statement or an 
update status=-1 and a delete where status=-1 would work. But it looks to me 
like I need a 3 way outer join and I can't seem to get it to work.

I tried a variety of statements that look something like:

update topcatattributevalues t
left outer join orderable_parts o on (t.topCatID=o.topCatID),
left outer join part_attributes p on (t.attName=p.attName and 
t.attValue=p.attValue and o.partID=p.partID)
set t.status=-1
where o.partID is null

I can't seem to get it.

Any assistance would be greatly appreciated.

Thanks.
Dave.
_
MSN 8 with e-mail virus protection service: 2 months FREE*  
http://join.msn.com/?page=features/virus

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


Re: SQL Help, Please...

2002-02-14 Thread Anvar Hussain K.M.

Hi,

At 11:21 AM 14/02/2002 -0500, you wrote:
>On Thursday 14 February 2002 07:58, Carl Shelbourne wrote:
> > Hi
> >
> > I am trying to write an auction script that uses mysql as its backend. Each
> > auction can have upto 25 sub auctions(cells) taking place.
> >
> > I'm trying to query the DB to give me a list of all the successfull bids
> > for each cell, for each auction...
> >
> > SELECT b.auctionId, b.cellId, MAX(b.bid) as bid, b.bidderId FROM sa_bid as
> > b, sa_auction AS a WHERE (a.state='active' AND b.auctionId=a.Id) GROUP BY
> > auctionId,cellId ORDER BY bidTime DESC
> >
> > This is further complicated in so much that multiple MAX bids may exist at
> > the same value, but, only the earliest should be returned for each cell.
> >
> > Which is returning some of the columns correctly, namely auctionid, cellid
> > and bid, but it does not return the bidderId correctly.
> >
> > Can anybody help?
>
>Your query is simply NOT relationally correct... The database has NO way to
>know WHICH bidder id to return in a given group. Suppose that for a given
>auctionid and cellid there might be 12 different bidders. You are telling the
>database engine to return ONE record for that group of 12 rows, so which
>bidderid will it use? The correct behaviour would be for MySQL to reject the
>query, it simply cannot be properly processed. Unfortunately I've found that
>MySQL doesn't behave correctly in these cases, instead it just returns one of
>the possible bidderid values at random.

This behaviour is well documented in the manual.  There is a very practical
reason to allow this behaviour.  Suppose for efficiency reasons data is 
denormalized
and for example, id,name and some other particulars are all kept in the same
table .  If the database was very strict that all the columns selected 
should be
in the group by expression, one will have to put all these columns (id,name,..)
in the group by clause. Then the db engine will have to take all these 
fields in
the intermediate ordering phase of the query execution.  Surely this will be
inefficient in both time and space.  But with the 'incorrect' behaviour of 
Mysql
one can put all the data columns required to be returned in the select and do
group by only the id. This would make the query to complete very fast compared
to the former and the effect will be even more pronounced with index on id 
field.


>Your query would be technically correct if you used a summary function on
>bidderid, like MAX(b.bidderId) or somesuch. The rule is that the returned
>columns in a GROUP BY must either by mentioned in the GROUP BY section of the
>query itself, OR they must be the results of a summary function. Any other
>use is not correct for the reason stated above.
>
>In other words, you need to rewrite your application logic. Most likely you
>will need to add the b.bidderId to the GROUP BY and have the program walk
>through the result set and do further sumarization on its own. Alternately
>you might be able to craft an SQL statement that gets you what you want, but
>without correlated subqueries it is going to be difficult or impossible. I've
>had this same sort of problem myself...
> >
> > Cheers
> >
> > Carl

The problem can be solved by using temporary tables.

Create temporary table tmp1
SELECT b.auctionId, b.cellId, MAX(b.bid) as bid FROM sa_bid as b,
  sa_auction AS a WHERE (a.state='active' AND b.auctionId=a.Id) GROUP BY
auctionId,cellId ;

Create temporary table tmp2
Select t1.auctionid, t1.cellid, t1.bid, min(b.bidtime) as bidtime from tmp1 
as t1, sa_bid as b
where (t1.auctionid = b.auctionid and t1.cellid = b.cellid and t1.bid = 
b.bid)
group by t1.auctionid,t1.cellid,t1.bid

Select t2.*, b.bidderid from tmp2 as t2, sa_bid as b
where t2.auctionid = b.auctionid and t2.cellid = b.cellid and t2.bid = 
b.bid and t2.bidtime = b.bidtime

I hope there may be better and simpler ways to achieve the objective.

Surely correlated subquery and derived table features might have been good 
features for such
situations.
Anvar.
 >
> > #
> > # Table structure for table `sa_auction`
> > #
> >
> > CREATE TABLE sa_auction (
> >   id int(11) NOT NULL auto_increment,
> >   start datetime NOT NULL default '-00-00 00:00:00',
> >   end datetime NOT NULL default '-00-00 00:00:00',
> >   state enum('waiting','active','expired') NOT NULL default 'waiting',
> >   PRIMARY KEY  (id)
> > ) TYPE=MyISAM;
> >
> > #
> > # Dumping data for table `sa_auction`
> > #
> >
> > INSERT INTO sa_auction (id, start, end, state) VALUES (1, '2002-01-23
> > 21:42:50', '2002-04-30 11:30:00', 'active'); INSERT INTO sa_auction (id,
> > start, end, state) VALUES (2, '2002-01-23 21:42:50', '2002-02-09 06:30:00',
> > 'expired'); INSERT INTO sa_auction (id, start, end, state) VALUES (3,
> > '2002-03-23 21:42:50', '2002-07-05 09:00:00', 'waiting'); INSERT INTO
> > sa_auction (id, start, end, state) VALUES (4, '2002-03-23 21:42:50',
> > '2002-08-01 11:30:00', 'waiting'); #
> > -

Re: SQL Help, Please...

2002-02-14 Thread Tod Harter

On Thursday 14 February 2002 07:58, Carl Shelbourne wrote:
> Hi
>
> I am trying to write an auction script that uses mysql as its backend. Each
> auction can have upto 25 sub auctions(cells) taking place.
>
> I'm trying to query the DB to give me a list of all the successfull bids
> for each cell, for each auction...
>
> SELECT b.auctionId, b.cellId, MAX(b.bid) as bid, b.bidderId FROM sa_bid as
> b, sa_auction AS a WHERE (a.state='active' AND b.auctionId=a.Id) GROUP BY
> auctionId,cellId ORDER BY bidTime DESC
>
> This is further complicated in so much that multiple MAX bids may exist at
> the same value, but, only the earliest should be returned for each cell.
>
> Which is returning some of the columns correctly, namely auctionid, cellid
> and bid, but it does not return the bidderId correctly.
>
> Can anybody help?

Your query is simply NOT relationally correct... The database has NO way to 
know WHICH bidder id to return in a given group. Suppose that for a given 
auctionid and cellid there might be 12 different bidders. You are telling the 
database engine to return ONE record for that group of 12 rows, so which 
bidderid will it use? The correct behaviour would be for MySQL to reject the 
query, it simply cannot be properly processed. Unfortunately I've found that 
MySQL doesn't behave correctly in these cases, instead it just returns one of 
the possible bidderid values at random. 

Your query would be technically correct if you used a summary function on 
bidderid, like MAX(b.bidderId) or somesuch. The rule is that the returned 
columns in a GROUP BY must either by mentioned in the GROUP BY section of the 
query itself, OR they must be the results of a summary function. Any other 
use is not correct for the reason stated above.

In other words, you need to rewrite your application logic. Most likely you 
will need to add the b.bidderId to the GROUP BY and have the program walk 
through the result set and do further sumarization on its own. Alternately 
you might be able to craft an SQL statement that gets you what you want, but 
without correlated subqueries it is going to be difficult or impossible. I've 
had this same sort of problem myself... 
>
> Cheers
>
> Carl
>
>
> #
> # Table structure for table `sa_auction`
> #
>
> CREATE TABLE sa_auction (
>   id int(11) NOT NULL auto_increment,
>   start datetime NOT NULL default '-00-00 00:00:00',
>   end datetime NOT NULL default '-00-00 00:00:00',
>   state enum('waiting','active','expired') NOT NULL default 'waiting',
>   PRIMARY KEY  (id)
> ) TYPE=MyISAM;
>
> #
> # Dumping data for table `sa_auction`
> #
>
> INSERT INTO sa_auction (id, start, end, state) VALUES (1, '2002-01-23
> 21:42:50', '2002-04-30 11:30:00', 'active'); INSERT INTO sa_auction (id,
> start, end, state) VALUES (2, '2002-01-23 21:42:50', '2002-02-09 06:30:00',
> 'expired'); INSERT INTO sa_auction (id, start, end, state) VALUES (3,
> '2002-03-23 21:42:50', '2002-07-05 09:00:00', 'waiting'); INSERT INTO
> sa_auction (id, start, end, state) VALUES (4, '2002-03-23 21:42:50',
> '2002-08-01 11:30:00', 'waiting'); #
> 
>
> #
> # Table structure for table `sa_bid`
> #
>
> CREATE TABLE sa_bid (
>   id int(11) NOT NULL auto_increment,
>   auctionId int(11) NOT NULL default '0',
>   cellId tinyint(4) NOT NULL default '0',
>   bid int(11) NOT NULL default '0',
>   bidderId mediumint(9) NOT NULL default '0',
>   bidtime timestamp(14) NOT NULL,
>   PRIMARY KEY  (id),
>   UNIQUE KEY id (id),
>   KEY id_2 (id)
> ) TYPE=MyISAM;
>
> #
> # Dumping data for table `sa_bid`
> #
>
> INSERT INTO sa_bid (id, auctionId, cellId, bid, bidderId, bidtime) VALUES
> (1, 1, 5, 1, 1, 20020128225421); INSERT INTO sa_bid (id, auctionId, cellId,
> bid, bidderId, bidtime) VALUES (2, 1, 5, 2, 2, 20020128225424); INSERT INTO
> sa_bid (id, auctionId, cellId, bid, bidderId, bidtime) VALUES (3, 1, 17,
> 15, 2, 20020213214856); INSERT INTO sa_bid (id, auctionId, cellId, bid,
> bidderId, bidtime) VALUES (4, 1, 5, 3, 4, 20020213215649);
>
>
>
> 
> This e-mail and any attachments are confidential.  If you are not the
> intended recipient, please notify us immediately by reply e-mail and then
> delete this message from your system. Do not copy this e-mail or any
> attachments, use the contents for any purpose, or disclose the contents to
> any other person: to do so could be a breach of confidence.
>
> -
> 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

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

SQL Help, Please...

2002-02-14 Thread Carl Shelbourne

Hi

I am trying to write an auction script that uses mysql as its backend. Each
auction can have upto 25 sub auctions(cells) taking place.

I'm trying to query the DB to give me a list of all the successfull bids
for each cell, for each auction...

SELECT b.auctionId, b.cellId, MAX(b.bid) as bid, b.bidderId FROM sa_bid as b, 
sa_auction AS a WHERE (a.state='active' AND b.auctionId=a.Id) GROUP BY
auctionId,cellId ORDER BY bidTime DESC

This is further complicated in so much that multiple MAX bids may exist at the same 
value, but, only the earliest should be returned for each cell.

Which is returning some of the columns correctly, namely auctionid, cellid and bid, 
but it does not return the bidderId correctly.

Can anybody help?

Cheers

Carl


#
# Table structure for table `sa_auction`
#

CREATE TABLE sa_auction (
  id int(11) NOT NULL auto_increment,
  start datetime NOT NULL default '-00-00 00:00:00',
  end datetime NOT NULL default '-00-00 00:00:00',
  state enum('waiting','active','expired') NOT NULL default 'waiting',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Dumping data for table `sa_auction`
#

INSERT INTO sa_auction (id, start, end, state) VALUES (1, '2002-01-23 21:42:50', 
'2002-04-30 11:30:00', 'active');
INSERT INTO sa_auction (id, start, end, state) VALUES (2, '2002-01-23 21:42:50', 
'2002-02-09 06:30:00', 'expired');
INSERT INTO sa_auction (id, start, end, state) VALUES (3, '2002-03-23 21:42:50', 
'2002-07-05 09:00:00', 'waiting');
INSERT INTO sa_auction (id, start, end, state) VALUES (4, '2002-03-23 21:42:50', 
'2002-08-01 11:30:00', 'waiting');
# 

#
# Table structure for table `sa_bid`
#

CREATE TABLE sa_bid (
  id int(11) NOT NULL auto_increment,
  auctionId int(11) NOT NULL default '0',
  cellId tinyint(4) NOT NULL default '0',
  bid int(11) NOT NULL default '0',
  bidderId mediumint(9) NOT NULL default '0',
  bidtime timestamp(14) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY id (id),
  KEY id_2 (id)
) TYPE=MyISAM;

#
# Dumping data for table `sa_bid`
#

INSERT INTO sa_bid (id, auctionId, cellId, bid, bidderId, bidtime) VALUES (1, 1, 5, 1, 
1, 20020128225421);
INSERT INTO sa_bid (id, auctionId, cellId, bid, bidderId, bidtime) VALUES (2, 1, 5, 2, 
2, 20020128225424);
INSERT INTO sa_bid (id, auctionId, cellId, bid, bidderId, bidtime) VALUES (3, 1, 17, 
15, 2, 20020213214856);
INSERT INTO sa_bid (id, auctionId, cellId, bid, bidderId, bidtime) VALUES (4, 1, 5, 3, 
4, 20020213215649);




This e-mail and any attachments are confidential.  If you are not the intended 
recipient, please notify us immediately by reply e-mail and then delete this message 
from your system. Do not copy this e-mail or any attachments, use the contents for any 
purpose, or disclose the contents to any other person: to do so could be a breach of 
confidence.

-
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