Link to home
Start Free TrialLog in
Avatar of Lightwalker
Lightwalker

asked on

Mysql Query - shorter way to see if row contains a number

Dear experts,

I have a query that I think I am making more complicated than it needs to be and would like to make it simpler.

I have attached the query below, what I have is this statement that tell me to show the record if it contains the number 1,2,3 if not to show an empty record "orderdetails.DetailItemID = 1 OR orderdetails.DetailItemID = 2 OR orderdetails.DetailItemID = 3".

Is there an easier way to say this i.e ( i know this does not work but something like) "orderdetails.DetailItemID = 1,2,3" I do not want to use <= 3 because in the future I may need to include more numbers that are not in order i.e 1,2,3,7,10 that the query will need to check for.

Many thanks as always for your help

SELECT orderdetails.DetailOrderID, 
	orderdetails.DetailItemID
FROM orderdetails
WHERE orderdetails.DetailsMemberID = 1 AND orderdetails.ProgramActivated = 0 AND  orderdetails.DetailItemID = 1 OR orderdetails.DetailItemID = 2 OR orderdetails.DetailItemID = 3 
ORDER BY orderdetails.DetailsID DESC
LIMIT 1

Open in new window

Avatar of Tekati68
Tekati68
Flag of United States of America image

You can use BETWEEN as follows.
SELECT orderdetails.DetailOrderID, 
	orderdetails.DetailItemID
FROM orderdetails
WHERE orderdetails.DetailsMemberID = 1 AND orderdetails.ProgramActivated = 0 AND orderdetails.DetailItemID BETWEEN 1 AND 3 
ORDER BY orderdetails.DetailsID DESC
LIMIT 1

Open in new window

Also note that they way you have it written above would give you what you want PLUS it would give you orderdetails.DetailItemID's 2 and 3 regardless of what orderdetails.DetailsMemberID and orderdetails.ProgramActivated were.  You need to enclose it in open and closed () in order to do what you were thinking like below.
SELECT orderdetails.DetailOrderID, 
	orderdetails.DetailItemID
FROM orderdetails
WHERE orderdetails.DetailsMemberID = 1 AND orderdetails.ProgramActivated = 0 AND (orderdetails.DetailItemID = 1 OR orderdetails.DetailItemID = 2 OR orderdetails.DetailItemID = 3)
ORDER BY orderdetails.DetailsID DESC
LIMIT 1

Open in new window

Avatar of Lightwalker
Lightwalker

ASKER

Thanks Tekati68,

In the future on the same query I will have to run this query to check numbers that are out of sequence i.e 1,2,3,7,10 so the between clause will not work for this. in there another more efficient way to check for numbers out of sequence.

thanks for your help
ASKER CERTIFIED SOLUTION
Avatar of Tekati68
Tekati68
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Thank you Tekati68, that's perfect I'm really grateful