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.
1. Always reduce the data before any joins as much possible. 2. When joining, make sure smaller tables are on the left side of join syntax, which makes this data set to be in memory / broadcasted to all the vertica nodes and makes join faster.
Note: The LEFT JOIN keyword returns all records from the left table (Customers), even if there are no matches in the right table (Orders).
The Left Join in MySQL is used to query records from multiple tables. This clause is similar to the Inner Join clause that can be used with a SELECT statement immediately after the FROM keyword.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With