I hope I've subscribed to the right list.

I am using version 3.23.41 of MySQL, and I'm having a problem getting
correct (expected?) behavior with column aliases.

I have a database A which has, among other things, an id field,
something like this:

CREATE TABLE a {
 somedata VARCHAR(10),
 id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
};

I have a second table which records ratings of entries in the first:

CREATE TABLE b {
 id INT UNSIGNED NOT NULL,
 userid INT UNSIGNED NOT NULL,
 plus TINYINT DEFAULT NULL,
 minus TINYINT DEFAULT NULL,
 PRIMARY KEY (id, userid)
};

There are reasons why I want to track the positive and negative votes
separately.  Anyhow, here is a query that works and gives me the
information I want:

SELECT somedata, a.id, COUNT(plus) AS pl, COUNT(minus) AS mi,
COUNT(plus)-COUNT(minus) AS rating FROM a LEFT OUTER JOIN b ON
(a.id=b.id)
GROUP BY a.id ORDER BY rating;

This works fine, but it seems to me that having COUNT(plus) twice and
COUNT(minus) twice may not be noticed and optimized by the database.
My original query was this:

SELECT somedata, a.id, COUNT(plus) AS pl, COUNT(minus) AS mi,
FROM a LEFT OUTER JOIN b ON (a.id=b.id) GROUP BY a.id ORDER BY
(pl-mi);

From that, I get the following error:

ERROR 1054: Unknown column 'pl' in 'order clause'


Now, before, when I used to have only 'pl' and no 'mi', it worked
great.  I could use 'ORDER BY pl', and it would just work.  Why can't
I use '(pl-mi)'?

Next, I tried this query instead:

SELECT somedata, a.id, COUNT(plus) AS pl, COUNT(minus) AS mi,
(pl-mi) AS rating FROM a LEFT OUTER JOIN b ON (a.id=b.id)
GROUP BY a.id ORDER BY rating;

From that, I get this error:

ERROR 1054: Unknown column 'pl' in 'field list'


So my questions are:

- Is it going to be wasteful of time to have COUNT(plus) and
COUNT(minus) twice?
- Why can I use the alias in an ORDER BY clause by itself but not in
an expression?
- Why can't I use the alias in the SELECT after it's been created?


Thanks very much for your help



_________________________________________________________________
Protect your PC - get McAfee.com VirusScan Online http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963



--------------------------------------------------------------------- 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