Search code examples
phpmysqljoinsearchsql-like

How can I improve my LIKE with JOIN search in mysql?


I currently have a search that looks like this:

SELECT s.ID 
    FROM Shoe s
        INNER JOIN Account a
            ON s.UserID = a.ID
        WHERE s.Publish='1' AND
            (s.Brand LIKE '%$Search%'
             OR s.Name LIKE '%$Search%'
             OR s.PrimaryColor LIKE '%$Search%'
             OR a.User LIKE '%$Search%') 
        ORDER BY s.ID DESC
LIMIT $offset, $rowsPerPage"

This works fine when I do a search such as "Blue" or "Nikes", but if I do a search such as "Blue Nikes" nothing returns. Should I use FULLTEXT? How can I improve this? I want to be able to search all columns that may relate to the search variable.


Solution

  • So after messing around and testing different things, I came up with this:

    "FROM Shoe AS s
        LEFT JOIN Accounts AS a ON s.UserID = a.ID
        WHERE (MATCH (s.Brand, s.Name, s.PrimaryColor AGAINST('$Search' IN BOOLEAN MODE)
            OR MATCH (a.User) AGAINST('$Search' IN BOOLEAN MODE))
                AND s.Publish='1'
        ORDER BY s.ID DESC"
    

    This seems to fix my issue that I mentioned above, I can now do a search such as "Blue Nike" and all items related to blue & nike will show up. Not sure if this is the most efficient way to go about it, but it does work.