Re: SQL syntax
| From: | David Robley | Date: | Tue, 15 Jan 2013 11:31:52 +0000 |
| Subject: | Re: SQL syntax | ||
| References: | 1 | Groups: | php.db |
| Request: | Send a blank email to php-db+get-48642@lists.php.net to get a copy of this message | ||
Karl DeSaulniers wrote:
> Hello Everyone,
> Hope your 2013 is treating you well.
> Quick question and apologies if it is a stupid question.
> Is this a viable syntax?
>
> $sql = "SELECT orderid
> FROM ORDERS_TABLE
> WHERE orderstatus = 'Cancelled' OR (orderstatus = ('New' OR
> 'Denied' OR 'Expired' OR 'Failed' OR 'Pending' OR
> 'Refunded' OR
> 'Reversed' OR 'Under Review' OR 'Voided') AND orderdate <
> '".mysqli_real_escape_string($yesterday)."')";
>
> Namely the orderstatus = (a whole bunch of options).
> In my database
orderstatus field is an enum() list btw.
> Or is there a better way to check multiple options against an enum
> inside your select statement?
> Reason I am doing this is to avoid having to do...
>
> $sql = "SELECT orderid
> FROM ORDERS_TABLE
> WHERE orderstatus = 'Cancelled' OR (orderstatus = 'New' AND
> orderdate < '".mysqli_real_escape_string($yesterday)."') OR
> (orderstatus = 'Denied' AND orderdate <
> '".mysqli_real_escape_string($yesterday)."') OR (orderstatus =
> 'Expired' AND orderdate <
> '".mysqli_real_escape_string($yesterday)."') ... etc";
>
> TIA,
>
> Karl DeSaulniers
> Design Drumm
> http://designdrumm.com
The best way to check if your SQL query is valid is to feed it to mysql
which will return an error if the syntax is incorrect :-) So TIAS! Although
it looks wrong to me.
But you might try the IN operator - something like
OR (orderstatus IN ('New', 'Denied', 'Expired', 'Failed',
'Pending',
'Refunded', 'Reversed', 'Under Review', 'Voided') AND
orderdate <
'".mysqli_real_escape_string($yesterday)."')
Personally I would have used a lookup table for the order status.
--
Cheers
David Robley
A cynic smells flowers and looks for the casket.