Solved

MySql select query with multiple LIKE clause not working

Posted on 2010-08-26
3
345 Views
Last Modified: 2012-05-10
Hi,

I have the following MySql statement that is generated by a script based upon the input from the user.
If the user enters more than one term like in this case 'glass plates' I want it to locate all products where the product code or description is LIKE glass OR plates.
This is fine but slightly more complicated by the additional AND clauses which end up with the malformed query below. I have tried a few alternatives but this query result needs to be paginated and they did not seem to work.

SELECT ProdHead.ProdCode, ProdHead.ProdDesc, ProdSku.Colour  
FROM ProdHead
INNER JOIN ProdSku ON ProdHead.ProdCode = ProdSku.ProdCode
INNER JOIN ProdTitleIndex ON ProdHead.ProdCode = ProdTitleIndex.ProdCode
WHERE Concat(ProdHead.ProdDesc,Prodhead.prodcode) LIKE '%glass%'
OR Concat(ProdHead.ProdDesc,Prodhead.prodcode) LIKE '%plates%'
AND ProdHead.Avail = 1
AND ProdSku.Avail = 1
AND ProdHead.SubGroup > 0
AND ProdHead.SubGroup = 228
ORDER BY ProdHead.ProdDesc
LIMIT 0, 10

The only way I can get this to work is by repeating the AND clauses after each OR cluase which is just silly so I was hoping there may be a way of doing something such as

WHERE ........ IN('%glass%','%plates%')


Any help appreciated.

Regards
Leigh
0
Comment
Question by:Lmillard
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
ID: 33529809
>WHERE ........ IN('%glass%','%plates%')

sorry, won't work, unfortunately ...

apart from that: you mix AND an OR, so you need ()
SELECT ProdHead.ProdCode, ProdHead.ProdDesc, ProdSku.Colour  
FROM ProdHead
INNER JOIN ProdSku ON ProdHead.ProdCode = ProdSku.ProdCode
INNER JOIN ProdTitleIndex ON ProdHead.ProdCode = ProdTitleIndex.ProdCode
WHERE ( Concat(ProdHead.ProdDesc,Prodhead.prodcode) LIKE '%glass%'
     OR Concat(ProdHead.ProdDesc,Prodhead.prodcode) LIKE '%plates%'
      )
AND ProdHead.Avail = 1
AND ProdSku.Avail = 1
AND ProdHead.SubGroup > 0
AND ProdHead.SubGroup = 228
ORDER BY ProdHead.ProdDesc
LIMIT 0, 10 

Open in new window

0
 
LVL 58

Expert Comment

by:cyberkiwi
ID: 33529829
You need to properly bracket the LIKE's

SELECT ProdHead.ProdCode, ProdHead.ProdDesc, ProdSku.Colour  
FROM ProdHead
INNER JOIN ProdSku ON ProdHead.ProdCode = ProdSku.ProdCode
INNER JOIN ProdTitleIndex ON ProdHead.ProdCode = ProdTitleIndex.ProdCode
WHERE
(     Concat(ProdHead.ProdDesc,Prodhead.prodcode) LIKE '%glass%'
      OR Concat(ProdHead.ProdDesc,Prodhead.prodcode) LIKE '%plates%' )
AND ProdHead.Avail = 1
AND ProdSku.Avail = 1
AND ProdHead.SubGroup > 0
AND ProdHead.SubGroup = 228
ORDER BY ProdHead.ProdDesc
LIMIT 0, 10

The IN form doesn't work, IN only takes exact matches.
Though the query above will work, to perform decently, you may want to try splitting it out and timing each alternative.

SELECT ProdHead.ProdCode, ProdHead.ProdDesc, ProdSku.Colour  
FROM ProdHead
INNER JOIN ProdSku ON ProdHead.ProdCode = ProdSku.ProdCode
INNER JOIN ProdTitleIndex ON ProdHead.ProdCode = ProdTitleIndex.ProdCode
WHERE
(     ProdHead.ProdDesc LIKE '%glass%' OR
      Prodhead.prodcode LIKE '%glass%' OR
      ProdHead.ProdDesc LIKE '%plates%' OR
      Prodhead.prodcode LIKE '%plates%')
AND ProdHead.Avail = 1
AND ProdSku.Avail = 1
AND ProdHead.SubGroup > 0
AND ProdHead.SubGroup = 228
ORDER BY ProdHead.ProdDesc
LIMIT 0, 10
0
 

Author Closing Comment

by:Lmillard
ID: 33530049
Great, thanks very much
0

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

If you find yourself in this situation “I have used SELECT DISTINCT but I’m getting duplicates” then I'm sorry to say you are using the wrong SQL technique as it only does one thing which is: produces whole rows that are unique. If the results you a…
This article shows the steps required to install WordPress on Azure. Web Apps, Mobile Apps, API Apps, or Functions, in Azure all these run in an App Service plan. WordPress is no exception and requires an App Service Plan and Database to install
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question