At 11:17 -0500 3/5/03, Jonathan Arnold wrote:
In the MySQL reference, it warns against using HAVING for items
that "should" be in a WHERE clause. I'm not sure what items
"should" be in a WHERE clause.

If a test can be in either clause, put it in the WHERE clause. The principle is that the sooner you can eliminate rows from consideration for further processing, the better. WHERE is evaluated to determine which rows to select, HAVING is applied to the selected rows after that.

This mostly makes a difference when using HAVING with GROUP BY. If you can
use WHERE to prevent certain rows even from entering into the grouping
calculations, it saves work compared to eliminating them later in the
HAVING.


My exact problem is I want to select some records that have a dotted IP address as one of the fields. And I want to filter out the multicast addresses, which are the addresses that begin with the numbers in the range of 224. thru 239. This does it:

SELECT * FROM Client WHERE left(inetAdr,instr(inetAdr,"."))< 224
    OR left(inetAdr,instr(inetAdr,".")) > 239

and this works as well:

SELECT *,left(inetAdr,instr(inetAdr,".")) as ia FROM Client HAVING ia < 224
    OR ia > 239

and it is a little cleaner, although as I'm going to be doing this in a
PHP script, cleanliness isn't all that important.

So I guess I have 2 questions:

1] Which should I use?
2] Is this the easiest way to check for the multicast address?

--
Jonathan Arnold     (mailto:[EMAIL PROTECTED])
Amazing Developments       http://www.buddydog.org

It ain't what you don't know that gets you into trouble.
It's what you know for sure that just ain't so.  Mark Twain


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